CodeFirst学习笔记

时间:2021-07-13 19:11:31

一.概要

本文主要是学习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不为空,非常奇怪。