Code First(代码先行)。它思想就是先定义模型中的类,再通过这些类生成数据库。这种开发模式适合于全新的项目,它使得我们可以以代码为核心进行设计而不是先构造数据库。
EF中创建数据库的表必须要有主键~!否则 将不成功。
首先我们创建3个实体类:
SysPermissonInfor.cs
1 public class SysPermissonInfor 2 { 3 public SysPermissonInfor() { 4 5 } 6 7 /// <summary> 8 /// 菜单权限编号 9 /// </summary> 10 [Key] 11 [DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)] 12 public int id { get; set; } 13 /// <summary> 14 /// 父菜单权限编号 15 /// </summary> 16 [Required] //非空声明 17 public int parentId { get; set; } 18 /// <summary> 19 /// 菜单名称 20 /// </summary> 21 [StringLength(50)] //最大长度 22 [Required] //非空声明 23 public string menuName { get; set; } 24 /// <summary> 25 /// 区域名 26 /// </summary> 27 [StringLength(50)] //最大长度 28 public string areaName { get; set; } 29 /// <summary> 30 /// 控制器名 31 /// </summary> 32 [StringLength(50)] //最大长度 33 public string controllerName { get; set; } 34 /// <summary> 35 /// 方法名 36 /// </summary> 37 [StringLength(50)] //最大长度 38 public string actionName { get; set; } 39 /// <summary> 40 /// 图标类名 41 /// </summary> 42 [StringLength(50)] //最大长度 43 public string iconClassName { get; set; } 44 /// <summary> 45 /// 备注 46 /// </summary> 47 [StringLength(200)] //最大长度 48 public string remarkContent { get; set; } 49 /// <summary> 50 /// 创建时间 51 /// </summary> 52 public Nullable<System.DateTime> addTime { get; set; } 53 /// <summary> 54 /// 排序标记 55 /// </summary> 56 public Nullable<int> sortFlag { get; set; } 57 /// <summary> 58 /// 隐藏标记 59 /// </summary> 60 public Nullable<int> delFlag { get; set; } 61 62 public virtual ICollection<SysRoleInfor> sysRoleInfor { get; set; } 63 }
SysRoleInfor.cs
1 public class SysRoleInfor 2 { 3 public SysRoleInfor() { 4 5 } 6 7 /// <summary> 8 /// 角色编号 9 /// </summary> 10 [Key] 11 [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 12 public int id { get; set; } 13 /// <summary> 14 /// 角色名称 15 /// </summary> 16 [StringLength(50)] //最大长度 17 [Required] //非空声明 18 public string roleName { get; set; } 19 /// <summary> 20 /// 角色说明 21 /// </summary> 22 [StringLength(100)] //最大长度 23 public string roleRemark { get; set; } 24 /// <summary> 25 /// 录入时间 26 /// </summary> 27 public Nullable<System.DateTime> addTime { get; set; } 28 /// <summary> 29 /// 隐藏标记 30 /// </summary> 31 public Nullable<int> delFlag { get; set; } 32 33 /// <summary> 34 ///多个用户可以对应一个角色 35 /// </summary> 36 public virtual ICollection<SysUserInfor> sysUserInfor { get; set; } 37 /// <summary> 38 /// 一个权限对应一个角色 39 /// </summary> 40 public virtual SysPermissonInfor sysPermissonInfor { get; set; } 41 42 }
SysUserInfor.cs
public class SysUserInfor { public SysUserInfor() { } /// <summary> /// 操作员编号 自增 /// </summary> [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int id { get; set; } /// <summary> /// 操作员帐号 /// </summary> [StringLength(50)] //最大长度 [Required] //非空声明 public string userAccount { get; set; } /// <summary> /// 操作员密码 /// </summary> [StringLength(32)] //最大长度 [Required] //非空声明 public string userPwd { get; set; } /// <summary> /// 姓名 /// </summary> [StringLength(20)] //最大长度 [Required] //非空声明 public string userRealName { get; set; } /// <summary> /// 性别 0:女 1:男 /// </summary> public Nullable<int> userSex { get; set; } /// <summary> /// 联系方式 /// </summary> [StringLength(50)] //最大长度 public string userPhone { get; set; } /// <summary> /// 备注说明 长度500 /// </summary> [StringLength(500)] //最大长度 public string userRemark { get; set; } /// <summary> /// /// </summary> public Nullable<System.DateTime> addTime { get; set; } /// <summary> /// 隐藏标记 0:正常 1:隐藏 /// </summary> public Nullable<int> delFlag { get; set; } /// <summary> ///一个用户对应一个角色 /// </summary> public SysRoleInfor sysRoleInfor { get; set; } }
其次创建一个DemoDbContext类
1 public class DemoDbContext : DbContext 2 { 3 public DemoDbContext() 4 : base("name=ConncodeFirst") 5 { 6 //数据库不存在则生成数据库 7 Database.SetInitializer<DemoDbContext>(new CreateDatabaseIfNotExists<DemoDbContext>()); 8 9 } 10 public DbSet<SysUserInfor> SysUserInfor { get; set; } 11 public DbSet<SysRoleInfor> SysRoleInfor { get; set; } 12 public DbSet<SysPermissonInfor> SysPermissonInfor { get; set; } 13 14 protected override void OnModelCreating(DbModelBuilder modelBuilder) 15 { 16 base.OnModelCreating(modelBuilder); 17 } 18 19 }
在mvc的Web.config里的configuration下增加数据库连接:
<connectionStrings> <add name="ConncodeFirst" connectionString="server=localhost;uid=sa;pwd=123456;database=CodeFirst_Task" providerName="System.Data.SqlClient"/> </connectionStrings>
再创建控制器,运行已生成数据库