.NET

简单使用 Entity Framework Code First

2019-03-05  本文已影响1人  迷糊先生_57ad
  1. 从工具菜单中,选择NuGet 包管理器,然后选择程序包管理器控制台。
  2. 在中程序包管理器控制台窗口中,输入以下命令:
Install-Package EntityFramework
public class Student
    {
        /// <summary>
        /// ID 属性将成为对应于此类的数据库表中的主键
        /// </summary>
        public int ID { get; set; }
        public string LastName { get; set; }
        public string FirstMidName { get; set; }
        public DateTime EnrollmentDate { get; set; }
        /// <summary>
        /// Gender 是枚举,问号后Grade类型声明指示Grade属性是空
        /// 表示一个等级未知或者尚未分配。
        /// </summary>
        public Gender? Gender{ get; set; }
        /// <summary>
        /// Enrollments 属性是导航属性,导航属性中包含与此实体相关的其他实体
        /// 导航属性通常定义为virtual 
        /// </summary>
        public virtual ICollection<Enrollment> Enrollments { get; set; }
        //如果导航属性可以具有多个实体 (如多对多或一对多关系),那么导航属性的类型必须是可以添加、 删除和更新条目的容器,如 ICollection。
    }
    /// <summary>
    /// 必须要继承DbContext此类
    /// </summary>
    public class SchoolContext : DbContext
    {
        /// <summary>
        /// 连接字符串 (它稍后将添加到 .config  文件) 的名称被传递给构造函数
        /// 使用 Code First 与 app.config/web.config 文件中的连接字符串
        /// </summary>
        public SchoolContext() : base("SchoolContext")
        {
        }
        //DbContext 知道要加载现有模型 (而不是使用 Code First 计算从代码) 的连接字符串是包含要使用的模型的详细信息的 EF 连接字符串
        //public SchoolContext() : base("name=SchoolContext")
        //{
        //}
        //设置初始化数据库
        //当第一次使用dbContext派生类的实例时,此接口的实现用于初始化基础数据库。此初始化可以有条件地
        //创建数据库和/或为其输入数据。所使用的策略是使用数据库类的静态初始化策略属性设置的
       static SchoolContext() {
            //一:数据库不存在时重新创建数据库[默认]
            Database.SetInitializer(new CreateDatabaseIfNotExists<SchoolContext>());
            //二:每次启动应用程序时创建数据库
            //Database.SetInitializer<SchoolContext>(new DropCreateDatabaseAlways<SchoolContext>());
            //三:策略三:模型更改时重新创建数据库
            //Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SchoolContext>());
            //策略四:从不创建数据库 
            //Database.SetInitializer<SchoolContext>(null);
        }
        public DbSet<Student> Students { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        public DbSet<Course> Courses { get; set; }
        /// <summary>
        /// 阻止表名正在变为复数形式 
        /// </summary>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }
  1. 从“工具”菜单中,选择“NuGet 包管理器” > “包管理器控制台”。
  2. 在PM>提示符处输入以下命令:
        //命令创建迁移文件夹的项目,在该文件夹中放入Configuration.cs可编辑以配置 Migrations 的文件 
        // Configuration类 Seed 方法 插入或更新后 Code First 创建或更新数据库测试数据。 创建数据库和每次更新数据库架构时,数据模型更改后调用方法,Seed方法运行每次执行update-database命令
        enable-migrations 
        // 创建测试数据
        //protected override void Seed(ContosoUniversity.DAL.SchoolContext context)
        //{
        //      var students = new List<Student>
        //            {
        //                new Student { FirstMidName = "Carson",   LastName = "Alexander", 
        //                    EnrollmentDate = DateTime.Parse("2010-09-01") },
        //            ......
        //              }
        //    students.ForEach(s => context.Students.AddOrUpdate(p => p.LastName, s));
        //    context.SaveChanges();
        //}
        //迁移生成的代码 在名为的文件*<时间戳>_InitialCreate.cs*。 Up方法InitialCreate类创建与数据模型实体集相对应的数据库表和Down方法中删除它们
        add-migration InitialCreate 
  1. update-database
        //update-database命令将运行Up方法来创建数据库,然后将它运行Seed方法来填充该数据库
        update-database
        //查看应用于目标数据库的SQL语句
        Update-Database -Verbose
       //数据库版本回溯
       Update-Database –TargetMigration:"迁移代码文件名称"
上一篇下一篇

猜你喜欢

热点阅读