实体框架和迁移问题

时间:2016-09-07 14:04:49

标签: entity-framework ef-migrations

这是我的样本课

public class Contacts
{
    [Key]
    public int ContactID { get; set; }

    public string Phone { get; set; }
    public string Fax { get; set; }
    public bool IsDefault { get; set; }

    public int AddressID { get; set; }
    public virtual Addresses Customer { get; set; } 

}

在我们的数据库中EF已经为联系人创建表。我为联系班添加了一个新字段,即public bool IsDefault { get; set; }

当我尝试以这种方式迁移时

Enable-Migrations
Add-Migration AddIsDefault
Update-Database -Verbose

然后VS显示添加新字段。我从包管理器控制台获得的sql,如

ALTER TABLE [dbo].[Contacts] ADD [IsDefault] [bit] NOT NULL DEFAULT 0
ALTER TABLE [dbo].[Customers] ADD [Address1] [nvarchar](max)
ALTER TABLE [dbo].[Customers] ADD [Address2] [nvarchar](max)
ALTER TABLE [dbo].[Customers] ADD [Phone] [nvarchar](max)
ALTER TABLE [dbo].[Customers] ADD [Fax] [nvarchar](max)
INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model],  [ProductVersion])
VALUES (N'201609071306198_AddIsDefault', N'EFTest.TestDBContext',

我虽然添加了新字段,但是当我查询联系人表时,却看不到添加了新字段。

迁移详情

namespace EFTest.Migrations
{
    using System;
    using System.Data.Entity.Migrations;

    public partial class AddIsDefault : DbMigration
    {
        public override void Up()
        {
            AddColumn("dbo.Contacts", "IsDefault", c => c.Boolean(nullable: false));
            AddColumn("dbo.Customers", "Address1", c => c.String());
            AddColumn("dbo.Customers", "Address2", c => c.String());
            AddColumn("dbo.Customers", "Phone", c => c.String());
            AddColumn("dbo.Customers", "Fax", c => c.String());
        }

        public override void Down()
        {
            DropColumn("dbo.Customers", "Fax");
            DropColumn("dbo.Customers", "Phone");
            DropColumn("dbo.Customers", "Address2");
            DropColumn("dbo.Customers", "Address1");
            DropColumn("dbo.Contacts", "IsDefault");
        }
    }
}

我没有为种子编写任何代码。它是否未将新字段添加到我的联系人表中的原因?

请指导我为什么在迁移命令发布后没有将新的字段IsDefault添加到表事件中?感谢

我更新的帖子

public class TestDBContext : DbContext
    {
        public TestDBContext()
            : base("name=TestDBContext")
        {
        }

        public DbSet<Customer> Customer { get; set; }
        public DbSet<Addresses> Addresses { get; set; }
        public DbSet<Contacts> Contacts { get; set; }
    }

连接字符串位于app.config文件

  <connectionStrings>
    <add name="TestDBContext" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\DB\TestDB.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

问题已解决

问题在我身边。

我的连接字符串看起来像

       

EF迁移不理解DataDirectory path

的含义

当我像下面的连接一样硬编码db文件路径时,问题就解决了。

  <connectionStrings>
    <add name="TestDBContext" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=c:\users\user1\documents\visual studio 2013\Projects\EFTest\EFTest\DB\TestDB.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

0 个答案:

没有答案