EF学习之CodeFirst(一)--创建Model
一、创建Model
创建Model类有两种方式:
1、直接创建model
所有约束条件都以特性的方式写在model的属性上面,映射到数据库的table表名标识在class上,例如:
[Table("UserInfo")] public class User { [Key]//主键 public int ID { get; set; } [MaxLength(50)]//最大长度 [Required]//不可为空 public string UserName { get; set; } [MaxLength(50)] [Required] [DataType(DataType.Password)]//设置与字段关联的附加类型 public string Password { get; set; } }
以上代码要引用命名空间:
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema;
2、Model和约束条件分开
将属性和约束分开,有利于保持类的完整性,而且修改起来更加方便,在使用的过程中更推荐这种写法。
创建的Model还是放在Models文件夹下,还是以前的写法,例如:
public class User { public int ID { get; set; } public string UserName { get; set; } public string Password { get; set; } }
将相关约束放在另外一个文件夹Maps里面,例如:
public class UserMap : EntityTypeConfiguration<User> { public UserMap() { //主键 this.HasKey(t => t.ID); //设置属性约束 this.Property(t => t.UserName).IsRequired().HasMaxLength(50); this.Property(t => t.Password).IsRequired().HasMaxLength(50); //表名和列名映射 this.ToTable("UserInfo"); this.Property(t => t.ID).HasColumnName("ID"); this.Property(t => t.UserName).HasColumnName("UserName"); this.Property(t => t.Password).HasColumnName("Password"); } }
以上要继承EntityTypeConfiguration<T>,在构造函数里面写入相关代码,并且引用命名空间:
using System.Data.Entity.ModelConfiguration;
二、创建数据库上下文
创建数据库上下文需继承DbContext类,构造函数里面指定数据库连接的字符串,表名用DbSet来实例化,例如:
针对第一种创建的Model:
public class DBContext : DbContext { public DBContext() : base("name=myConn") { } public DbSet<User> UserInfo { get; set; } }
针对第二种创建的Model,需要将Map和Class映射:
public class DBContext : DbContext { public DBContext() : base("name=myConn") { } public DbSet<User> UserInfo { get; set; } /// <summary> /// 映射约束 /// </summary> /// <param name="modelBuilder"></param> protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new UserMap()); } }
三、配置数据库连接字符串
在webConfig文件里配置数据库连接字符串:
<connectionStrings> <add name="myConn" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=EFTest;Integrated Security=SSPI;" /> </connectionStrings>
四、配置Global
在Application_Start方法里添加如下代码:
//如果数据库不存在就新建数据库 Database.SetInitializer(new CreateDatabaseIfNotExists<DBContext>());
五、添加Controller,运行即可。