EF Code First

这里说一下Code First 的实现原理

step1:首先建立自已的表,即建一个类。类与表对应

User类

View Code
  public class User
    {
        
        public int UserID { set; get; }

        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email address")]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }

        public string Roles { get; set; }
    }


其中[]为对数据库列的修饰

step2:建立数据上下文,用于与数据库同步

        private readonly static string CONNECTION_STRING = "name=connectString";

      //用于与数据库的连接,对应
       <configuration>
          <connectionStrings>
              <add name="connectString"

//用于设置表

        public DbSet<User>  Users { set; get; }

//在基类的时候连接数据库,并且注册(这个地方的原理不太清楚,请知道的大神知道)

        public SchoolContext() : base(CONNECTION_STRING)
        {

        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();//移除复数表名的契约

        }
    }

View Code
    public class SchoolContext:DbContext
    {
        private readonly static string CONNECTION_STRING = "name=connectString";

        public DbSet<User>  Users { set; get; }

        public SchoolContext() : base(CONNECTION_STRING) 
        {

        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();//移除复数表名的契约

        }
    }

这样就完成了Codefirst

当然我们也可以在初始化数据库时加写数据:

Application_Start()中加入如下代码:
            Database.SetInitializer<SchoolContext>(new SchoolInitializer());

其中SchoolInitializer为一个初始化的类

代码如下:

    public class SchoolInitializer : DropCreateDatabaseIfModelChanges<SchoolContext>
    {
        protected override void Seed(SchoolContext context)
        {
                var users = new List<User>{
                new User{ UserID=1, UserName="Admin", Password="123", ConfirmPassword="123", Email="Admin@Dell.com", Roles="Admin"},
                new User{ UserID=2, UserName="User1", Password="123", ConfirmPassword="123", Email="User1@Dell.com", Roles="User"},
            };
            users.ForEach(s => context.Users.Add(s));
            context.SaveChanges();
    }
}

 如有转载:请注明出处哦,亲!

posted @ 2012-09-03 23:37  David Shu  阅读(1393)  评论(4编辑  收藏  举报