一直使用EF的DBFirst没使用过CodeFirst,而且CodeFirst使用的人又多,虽然麻烦点但是还是要学下的。
来写个一使用的入门教程
新建一个codefirst的demo,需引入EntityFramework
然后简单建立一模型 这边以Table特性命名Emp,默认如果不加此特性约定是以s结尾如Emps生成表
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace EFcodefirstdemo.model { [Table("Emp")] public class Emp { [Key] public string empid { get; set; } public string empname { get; set; } public int? age { get; set; } public string depid { get; set; } public string tel { get; set; } } }
接着建立上下文 我们自己建立的oaDbContext要继承DbContext,并且以刚才建立的模型的泛型类建立一个DbSet<T>属性.注意,每个模型都必须在DbContext中定义一个对应的DbSet<T>属性。在DbContext中创建字符串连接构造函数,我们以name=""指定我们在配置文件中的连接字符串。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Configuration; namespace EFcodefirstdemo.model { public class oaDbContext:DbContext { public oaDbContext() : base("name=MyStrConn") { //策略一:数据库不存在时重新创建数据库 //Database.SetInitializer<oaDbContext>(new CreateDatabaseIfNotExists<oaDbContext>()); //策略二:每次启动应用程序时创建数据库 //Database.SetInitializer<oaDbContext>(new DropCreateDatabaseAlways<oaDbContext>()); //策略三:模型更改时重新创建数据库 Database.SetInitializer<oaDbContext>(new DropCreateDatabaseIfModelChanges<oaDbContext>()); //策略四:从不创建数据库 //Database.SetInitializer<oaDbContext>(null); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { //throw new UnintentionalCodeFirstException(); } public DbSet<Emp> Emps { get; set; } } }
配置下数据连接字符串 App.Config中connectionStrings节点中增加
<add name="MyStrConn" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=testdb;Integrated Security=True;user id=sa;password=123;"/>
执行看下效果
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; using EFcodefirstdemo.model; namespace EFcodefirstdemo { class Program { static void Main(string[] args) { try { using (var db = new oaDbContext()) { Emp model = new Emp(); model.empid = "001"; model.empname = "tony"; model.age = 10; model.depid = "IT"; model.tel = "123"; db.Emps.Add(model); db.SaveChanges(); } } catch (Exception e) { } Console.ReadKey(); } } }
这样我们数据库中就增加了一个testdb的数据库而且里面有表Emp已经插入了刚才的一条数据
这就是简单的CodeFirst的实现方法.