zoukankan      html  css  js  c++  java
  • 使用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。这样执行有一个后果,如果列里面有数据,则数据全部丢失。

  • 相关阅读:
    Java 练习(经典例题: 生产者/消费者问题)
    Java 基础(线程的通信)
    Java 练习(线程的同步)
    Java 基础( ReentrantLock )
    Java 基础(线程的死锁问题)
    Java基础(单实例设计模式懒汉式解决线程安全)
    Java 基础(同步方法解决线程安全问题)
    Java 基础(Thread类的有关方法,线程的调度)
    Java 基础(线程的生命周期, 同步代码块解决线程安全)
    Java 基础(以实现 Runnable 接口的方式创建多线程)
  • 原文地址:https://www.cnblogs.com/ilooking/p/4589857.html
Copyright © 2011-2022 走看看