—layout: wtitle: EntityFramework Code First 数据建模date: 2019-06-04 14:21:30tags:—
Entity Framework(EF) Core是ADO.NET的开源对象关系映射(ORM)框架。 但是由于Entity framework版本6与.NET Framework分离,它是.NET Framework的一部分, .NET Framework版本:4.5 EntityFramework版本:6.0.0
创建MVC项目:
在解决方案中添加类库Model,在此生成数据库模型类如下:
(↑类是我们后面添加的,接着往下看↓)
数据库说明:班级表,学生表。
新建基类(存放班级和学生表共有的字段)BaseEntity
namespace Model
{
public class BaseEntity
{
public int Id { get; set; }//编号
public DateTime CreateTime { get { return DateTime.Now; } }//创建时间
public bool IsRemoved { get; set; }//是否删除
}
}
新建班级模型类Class:(继承BaseEntity)
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;//引入命名空间
using System.Linq;using System.Text;using System.Threading.Tasks;
namespace Model{
[Table("tb1_Class")]//表名
public class Class:BaseEntity//继承BaseEntity,编号,创建时间,是否删除
{ //班级名称,最大长度20
[StringLength(20)]
[Required]//不为空,不加为不允许为空
public string Name { get; set; }
}
}
新建学生模型类Student:(同样继承BaseEntity)
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;//引入命名空间
using System.Linq;using System.Text;
using System.Threading.Tasks;
namespace Model{
[Table("tb1_Student")]
public class Student : BaseEntity//继承BaseEntity,编号,创建时间,是否删除
{ public Student()
{
this.Age = DateTime.Now.Year - Birthday.Value.Year;//计算年龄,此字段不需要在数据库中出现
}
public string Name { get; set; }
public DateTime? Birthday { get; set; }
[NotMapped]//从数据库中排除映射(此字段不在数据库生成)
public int Age { get; set; }
//外键关联
[ForeignKey("")]
public int ClassId { get; set; }
public Class Class { get; set; }
}}
创建上下文类 StudentContext,此类需要继承DbContext,命名空间using System.Data.Entity;
namespace Model{ public class StudentContext:DbContext { public StudentContext() : base("name=Defaultconnection")//name="Defaultconnection" 配置文件中的name { Database.SetInitializer<StudentContext>(null); }
public DbSet<Class> Class { get; set; }
public DbSet<Student> Student { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); //去掉级联删除操作 modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); } }}
在MVC 项目的 web.congif配置文件中加入如下代码(连接数据库字符串配置)数据称mvcDBbash<connectionStrings> <add name="Defaultconnection" connectionString="Data Source=.;Initial Catalog=mvcDB;uid=sa;pwd=123456" providerName="System.Data.SqlClient" /> </connectionStrings>
好啦,到此数据模型就基本完成了,下面就要来生成数据库迁移文件,在数据库中生成数据库和对应的表了。打开NuGet工具,默认项目切换为Model
依次执行以下命令
PM> add-migration "mvcdb" //添加迁移 mvcdb:名称,自定义
PM> update-database //更新数据库
按照上面的步骤不报错的话就能在你的Model项目会多出一个文件夹Migrations,里面有刚添加的迁移文件mvcdb和Configuration文件在Configuration中你可以初始化数据库数据,注释我翻译好了,参考哦!
{ using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
internal sealed class Configuration : DbMigrationsConfiguration<Model.StudentContext>
{ public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(Model.StudentContext context)
{
// This method will be called after migrating to the latest version.
// 迁移到最新版本后将调用此方法。
// You can use the DbSet<T>.AddOrUpdate() helper extension method
// 可以使用dbset<t>.addorupdate()helper扩展方法
// to avoid creating duplicate seed data.
// 以避免创建重复的种子数据。
context.Class.AddOrUpdate<Class>(
new Class{Id=1,Name="T190"},
new Class{Id=2,Name="T191"},
ew Class{Id=3,Name="T192"},
new Class{Id=4,Name="T193"}
);
}
}
}
执行update-database 更新数据库
打开数据库,可以看到数据库成功
本文链接:https://www.ironjf.top/2019/06/04/EntityFramework-Code-First-数据建模/