这是我的样本课
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; }
}
<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>