如何将数据库迁移和 EF 4.3 与代码优先方法结合使用来创建关系表
本文关键字:结合 方法 关系 创建 代码 迁移 数据库 EF | 更新日期: 2023-09-27 18:37:06
我一直在尝试将 MVC 4.0 与 EF 4.3 一起使用,以及 Scott Gu 在 Tech Days 上介绍的数据库迁移,并且遇到了当存在多对多关系时创建的数据库问题。
http://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2364 开始于 21:14
其中包括用于生成数据库的代码片段,如下图所示。
public class Trip {
public int ID { get; set; }
public string Name { get; set; }
public DateTime Begin { get; set; }
public DateTime End { get; set; }
public Location HomeCountry { get; set; }
//public IList<Location> Itinerary { get; set; }
public ICollection<Location> Itinerary { get; set; }
public Trip()
{
this.Itinerary = new HashSet<Location>();
}
}
public class Location
{
public int ID { get; set; }
public string Name { get; set; }
public ICollection<Trip> Trips { get; set; }
public Location()
{
this.Trips = new HashSet<Trip>();
}
}
这是生成的数据库。(我本来会发布图片,但我无法发布图片,仍然是新用户)
表 地点 PK ID (整数) 名称(瓦尔查尔) Trip_ID(整型) 旅行 PK ID (整数) 名称(瓦尔查尔) 开始(日期时间) 结束(日期时间) HomeCountry_ID(国际)
我想我本来希望为位置和行程之间的多对多关系创建第三个关系表(许多位置可以应用于许多行程),而不是将Trip_Id列添加到位置表中。 有谁知道我在这里做错了什么?有没有办法让数据库自动化正确创建这些表?
提前感谢您的所有帮助!
更新:我找到了以下链接,但我仍然无法使用 EF 4.3 使其正常工作。 我还编辑了我的代码片段以反映以下帖子。
http://www.codeproject.com/Articles/234606/Creating-a-Many-To-Many-Mapping-Using-Code-First
我终于能够使用我添加到更新问题的链接正确创建表格,但仍然没有真正出售解决方案。在我的 Db 上下文类中,我添加了方法 [protected override void OnModelCreateating(DbModelBuilder modelBuilder)]。
public class MyTesterContext : DbContext
{
public MyTesterContext () : base("name=MyTesterContext ")
{
}
public DbSet<Trip> Trips { get; set; }
public DbSet<Location> Locations { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Trip>().
HasMany(t => t.Itinerary).
WithMany(l => l.Trips).
Map(
m =>
{
m.MapLeftKey("TripID");
m.MapRightKey("LocationID");
m.ToTable("TripLocations");
});
}
}
新数据库现在如下所示:
表 地点 PK ID (整数) 名称(瓦尔查尔) 旅行地点 TripID (int) 位置标识(整数) 旅行 PK ID (整数) 名称(瓦尔查尔) 开始(日期时间) 结束(日期时间) HomeCountry_ID(国际)
在代码项目讨论中,它说:
http://www.codeproject.com/Articles/234606/Creating-a-Many-To-Many-Mapping-Using-Code-First
所以我们对现有的关系表有一个小问题。我们可以通过重写 OnModelCreate 方法并使用 Code First Fluent API 添加映射来解决此问题。
由于我没有现有的关系表,老实说,我认为不需要此步骤,但是我一直无法找到任何其他方法来创建正确的表结构。 希望随着我对该技术越来越熟悉,我可以找到一种方法来绕过需要重写 OnModelCreate 方法的方法。