【发布时间】:2013-05-17 11:57:59
【问题描述】:
我在 Visual Studio 2012 Express 和 SQL Server 2012 Express 的 MVC 4 EF5 应用程序中使用迁移,使用 Code First。
我在configuration.cs中使用了Seed方法,首先创建了一个Tags表。当我从包管理器执行'Update-Database -verbose -force'时,它可以正常工作并且不会创建重复的标签 - 如果删除,则会重新创建它们:
db.Tags.AddOrUpdate(
t => t.Name,
new Tag { Name = "Bakery", NamePlural = "Bakeries" },
new Tag { Name = "Bar", NamePlural = "Bars" },
new Tag { Name = "Bookshop", NamePlural = "Bookshops" }
);
db.SaveChanges();
然后我尝试添加相关的地方数据:
db.Places.AddOrUpdate(
p => p.Name,
new Place
{
Name = "Shoreditch Grind",
URL = "shoreditch-grind-cafe",
Address = "213 Old St",
City = "London",
PostCode = "EC1V 9NR",
Website = "www.shoreditchgrind.com",
Phone = "020 7490 0101",
About = "Good coffee on the Silicon Roundabout",
Image = "noimage.png",
Tag = db.Tags.Single(t => t.Name == "Bar")
},
new Place
{
Name = "The Old Blue Last",
URL = "old-blue-last-pub",
Address = "38 Great Eastern St",
City = "London",
PostCode = "EC2A 3ES",
Website = "www.theoldbluelast.com",
Phone = "020 7739 7033",
About = "Pub of Vice Magazine",
Image = "noimage.png",
Tag = db.Tags.Single(t => t.Name == "Bakery")
}
);
然而,这会产生重复,每次我执行“Update-Database -verbose -force”时都会再次添加所有位置
我是 MVC 的新手 - 我也不完全理解它的作用:
p => p.Name,
我有一种感觉,也许我应该为每个对象手动添加 ID 值?
如何在不创建重复的 Places 的情况下运行它?
能够简单地将每个 Tag.Name 标记为唯一也很有用。
谢谢。
【问题讨论】:
-
每次运行
update-database时都会调用Seed()方法,我认为这就是为什么会出现重复项。如果您实际查看您的表 - 我怀疑可能有重复的 Places 行,但这些重复行(显然)会有不同的主键? -
是的,他们有不同的主键(PlaceID)。但是,它不会在标签表中创建重复项。修复它的最佳方法是什么?谢谢
标签: c# asp.net-mvc entity-framework asp.net-mvc-4 ef-code-first