使用EF codeFirst创建数据库

常用的三行NuGet用于EF命令(当然可以直接用命令“get-help EntityFramework”获取):“Enable-Migrations”   --在对应项目中启用、“Add-Migration <名称>”  --搭建基架、“Update-Database”  --提交(应用基于代码的迁移)

 

添加简单的实体

/// <summary>
    /// 人名
    /// </summary>
    public class PersonName
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string FullName
        {
            get
            {
                return string.Format("{0} {1}", FirstName, LastName);
            }
        }
    }

添加上下文

public class CodeFirstDbContext : DbContext
    {
        public DbSet<UserModel> Users { get; set; }

        public CodeFirstDbContext() : base("DefautConnection") { }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<UserModel>();
        }
    }

 

在“程序包管理控制台”(注意第二步截图中所说的,以下关于NuGet命令均必须如此),输入“Enable-Migrations”回车

 

在DbContext所在的项目CodeFirst下的App.config下添加如下节点(注意不要添加到configSections节点之前)

设置好数据库连接字串

<connectionStrings>
    <add name="Default" connectionString="Server=.; Database=ModuleZeroSampleProject; user id=sa;password=sa"  providerName="System.Data.SqlClient" />
  </connectionStrings>

 

在“程序包管理控制台”输入命令“Enable-Migrations”,保证无错误提示,继续输入“Add-Migration CreateDb”,注意CreateDb可由咱们自行定义

 

最后在控制台中输入命令同步到  “Update-Database” 同步生成数据库

 

关于数据迁移

 

Enable-Migrations

 

执行完命令后,在项目中自动生成文件夹Migrations,以及文件夹下面的Configuration.cs和201502150256371_InitialCreate.cs

 

增属性

修改类的结构,在这里,我们假设新增属性public string Test{get;set;},生成程序

 

增加迁移的节点:Add-Migration PaperTest(在前面操作的基础上,执行这条命令时,程序会自动判断在上次迁移基础上的修改)

执行完上面的命令后,会在文件夹Migrations下自动生成一个类:

public partial class PaperTest : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.Papers", "Test", c => c.String());
    }
    
    public override void Down()
    {
        DropColumn("dbo.Papers", "Test");
    }
}

 

class的名称是上面Add后面定义的。而类下面有两个方法,一个是Up,一个是Down。在Up里面,记录了需要升级的修改,这里也就是Papers表格增加了列Test。只要我们在后面执行Update-Database,就会执行此类下面的Up函数。

这里的Down函数简单介绍就是,为了回滚修改而设计的。如果用户希望恢复到某一个迁移节点,程序会自动根据已经执行的迁移,判断回滚哪些迁移,执行他们的Down函数。

执行Update-Database,将这里的修改升级到数据库

 

删属性

删除属性的操作和增加属性的操作差不多。首先修改类结构,屏蔽上面的//public string Test { get; set; }。然后Add一个迁移节点,命名为DelPaperTest。执行此命令,生成相应的迁移类文件。最后执行Update-Database

 

改属性

1.在Paper类下修改属性名称,生成项目:

public string Desc { get; set; }  -->  public string DescAA { get; set; }

 

.按照常规的方法,接下来我们应该添加一个迁移的节点。首先我们看看这样执行有什么样的结果:

Add-Migration ModifyPaper

 

public partial class ModifyPaper : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.Papers", "DescAA", c => c.String());
        DropColumn("dbo.Papers", "Desc");
    }
    
    public override void Down()
    {
        AddColumn("dbo.Papers", "Desc", c => c.String());
        DropColumn("dbo.Papers", "DescAA");
    }
}

 

可以看到在Up里面,它不是直接修改了列的名称,而是先增加新列DescAA,然后删除旧列Desc。这样执行有一个后果,如果列里面有数据,则数据全部丢失。

posted @ 2015-06-19 22:37  草旅虫  阅读(500)  评论(0编辑  收藏  举报