什么是Code First
用白话说:就是不用打开数据库软件,也不用引用实体表,直接用代码code来把实体映射成数据表
Code First实战
1.直接新建立一个控制台应用程序
2.我们新建两个类,一个叫ClassInfo
3. 一个叫StudentInfo
4.怎么让这两个类有关联呢?在ClassInfo里添加
5.在StudentInfo里添加
6.怎么把这两个类映射成两个表呢?首先添加引用。一个是system.data.entity,一个是Entity Framwork,还有一个是Entity Framwork.sqlserver。前者的位置如下
7.后两个得自己添加,先浏览——然后在这个目录下
这里请注意:如果您那里没有这两个DLL插件,请参考我的前两篇EF博客,新建“来自数据库的EF设计器”。然后在这个的packages里就能找到了~
8.然后在配置文件里写上数据库连接信息
9.接着,我们需要自己建立一个EF数据操作类。新建一个CodeFirstDbContext,然后需要导入命名空间,继承父类。代码如下
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeFirst
{
public class CodeFirstDbContext : DbContext
{
public CodeFirstDbContext() : base("name=connStr")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
public DbSet<ClassInfo> ClassInfo { get; set; }
public DbSet<StudentInfo> StudentInfo { get; set; }
}
}
10.然后我们要完善学生类和班级类,为它们设置约束条件,这里需要添加引用哦
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeFirst
{
public class ClassInfo
{
[Key] //设置主键
public int Id { get; set; }
[StringLength(32)] //设置类型长度
[Required] //不允许为空
public string ClassName { get; set; }
[Required]
public DateTime CreateTime { get; set; }
public virtual ICollection<StudentInfo> StudentInfo { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeFirst
{
public class StudentInfo
{
[Key]
public int Id { get; set; }
[StringLength(32)]
[Required]
public string StuName { get; set; }
[Required]
public DateTime SubTime { get; set; }
public virtual ClassInfo ClassInfo { get; set; }
}
}
11.我们可以在program里执行建表的命令了,先写入如下代码再运行一下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeFirst
{
public class Program
{
static void Main(string[] args)
{
CodeFirstDbContext db = new CodeFirstDbContext();
db.Database.CreateIfNotExists();
ClassInfo classInfo = new ClassInfo();
classInfo.ClassName = "0413班";
classInfo.CreateTime = DateTime.Now;
db.ClassInfo.Add(classInfo);
db.SaveChanges();
}
}
}
12.检查你的数据表
尾声
是不是很神奇呢?不过你是否发现,CodeFirst是这三种方式最复杂的。要是我的话,能用前两种一定不用CodeFist。哈哈