EntityFramework Code First 数据建模

—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 更新数据库
打开数据库,可以看到数据库成功

{% asset_img mvcdb.PNG This is an mvcdb image %}

本文链接:https://www.ironjf.top/2019/06/04/EntityFramework-Code-First-数据建模/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值