一.概要
本文主要是学习CodeFirst思想。技术上的实现是C#(.net framework4.6.1) 控制台 + PostgreSQL 10.2.1
代码:https://pan.baidu.com/s/1ggzHRub
二.实现过程
1.新建控制台
2.添加nuget包:EntityFramework6.Npgsql,还有很多次要包,依据代码需要增加
3.app.config配置,依据每个人的不同情况自行更改
<system.data>
<DbProviderFactories>
<add name="Npgsql Data Provider" invariant="Npgsql" description="Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="Postgresql" connectionString="Server=localhost;Port=5432;User Id=postgres;Password=123456;Database=TestDB;Pooling=true;" providerName="Npgsql" />
</connectionStrings>
4.新建一个类(不是重点)
5.新建这个类的context继承自DbContext(关键)
public class DonatorContext : DbContext
{
public DonatorContext() : base("Postgresql") { }//从配置connectionString获取名称为Postgresql的数据库连接信息
public DbSet<Donator> donators { get; set; }//表名,可修改
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("public");//设置模式
modelBuilder.Entity<Donator>().ToTable("donators");//修改表名
modelBuilder.Entity<Donator>().HasKey(t => t.donator_id);//设置key
modelBuilder.Entity<Donator>().Property(t => t.donator_id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);//donator_id自增长
}
}
6.在program中实现类生成数据库表(CodeFirst)
donatorContext.Database.CreateIfNotExists();//如果数据库不存在时则创建
donatorContext.donators.Create();
var d = new Donator()
{
donator_id = 88,
amount = 2,
name = "128",
donate_date = DateTime.Now
};
donatorContext.donators.Add(d);
donatorContext.SaveChanges();
三.总结
上面是主要过程,可以实现CodeFirst思想。但还有个问题,每次新增数据,必须不存在数据库从0开始;如果存在数据库,插入数据一直报错。id不为空,非常奇怪。