c# - 在 Configuration.cs 中播种数据,使用 AddOrUpdate 创建重复数据

标签 c# asp.net-mvc entity-framework asp.net-mvc-4 ef-code-first

我正在 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 值?

如何在不创建重复地点的情况下运行此程序?

能够简单地将每个 Tag.Name 标记为唯一也很有用。

谢谢。

最佳答案

这可能有效:

var place = 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 = "123 456 789",  // updated number
  About = "Pub of Vice Magazine",
  Image = "noimage.png",
  TagID = db.Tags.Single(t => t.Name == "Bakery").TagID
};
db.Places.AddOrUpdate(p => p.Name, place);
db.SaveChanges();

由于“The Old Blue Last”已经存在,并且我们已经根据 p.Name 进行了更新,因此它应该只将该条目更新为“123 456 789”。这与您尝试过的类似,但可能有效。查看更多here

您还提到您不确定 p => p.Name 的作用。 => 称为 Lambda 表达式。它是一个匿名函数。它是一个没有声明、访问修饰符、返回类型、名称等的方法。它是一个简写表达式,允许您在要使用方法的地方编写方法。

查看更多 herehere.

关于c# - 在 Configuration.cs 中播种数据,使用 AddOrUpdate 创建重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16608440/

相关文章:

c# - 将委托(delegate)(带参数)作为参数传递

c# - 如何使用 ASP.NET Core 日志记录延迟记录?

asp.net-mvc - Telerik MVC 网格的全局设置

c# - 如何使用外键属性的自定义名称映射相关对象,例如 PostId 而不是 Post_Id

c# - 如何使用 EntityFramework 实现通用 MVC Web Controller 和用于 CRUD 操作的通用 View

entity-framework - Entity Framework 与NHibernate-性能

c# - 针对 AD 异常验证用户名和密码

c# - MouseEnter 和 MouseLeave 事件未在用户控件中引发

asp.net-mvc - ASP MVC : Getting confused when implementing ASP MVC Security

c# - ASP.NET MVC 中 htmlAttributes 的匿名类和 IDictionary<string,object> 之间的区别?