C# 如何使用数据库迁移和EF 4.3以及代码优先的方法来创建关系表?
我一直在尝试使用MVC4.0和EF4.3,以及Scott Gu在Tech Days上介绍的数据库迁移,但遇到了一个问题,即当存在多对多关系时创建的数据库 21:14开始 包括用于生成数据库的代码片段,如下图所示C# 如何使用数据库迁移和EF 4.3以及代码优先的方法来创建关系表?,c#,asp.net-mvc-4,database-migration,entity-framework-4.3,C#,Asp.net Mvc 4,Database Migration,Entity Framework 4.3,我一直在尝试使用MVC4.0和EF4.3,以及Scott Gu在Tech Days上介绍的数据库迁移,但遇到了一个问题,即当存在多对多关系时创建的数据库 21:14开始 包括用于生成数据库的代码片段,如下图所示 public class Trip { public int ID { get; set; } public string Name { get; set; } public DateTime Begin { get; set; } public D
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>();
}
}
公务舱旅行{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共日期时间开始{get;set;}
公共日期时间结束{get;set;}
公共位置母国{get;set;}
//公共IList行程{get;set;}
公共ICollection行程{get;set;}
公共旅行()
{
this.inventary=newhashset();
}
}
公共类位置
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共ICollection Trips{get;set;}
公共场所()
{
this.Trips=newhashset();
}
}
这就是结果数据库。(我本来会发布一张图片,但我无法发布图片,仍然是一个新用户)
桌子
位置
主键ID(int)
名称(varchar)
跳闸ID(int)
旅行
主键ID(int)
名称(varchar)
开始(日期时间)
完(日期时间)
母国ID(国际)
我想我会期望为位置和行程之间的多对多关系创建第三个关系表(多个位置可以应用于多个行程),而不是将Trip_Id列添加到位置表中。有人知道我做错了什么吗?有没有办法让数据库自动化来正确创建这些表
提前感谢您的帮助
更新:
我找到了以下链接,但我仍然无法使用EF4.3使其正常工作。我还编辑了代码片段以反映以下文章
我终于能够使用添加到更新问题中的链接正确创建表格,但解决方案仍然不受欢迎。我在Db上下文类中添加了方法[protected override void OnModelCreating(DbModelBuilder modelBuilder)] 公共类MyTesterContext:DbContext { 公共MyTesterContext():base(“name=MyTesterContext”) { } 公共数据库集Trips{get;set;} 公共数据库集位置{get;set;} 模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder) { modelBuilder.Entity()。 有很多(t=>t.行程)。 有很多(l=>l.行程)。 地图( m=> { m、 MapLeftKey(“TripID”); m、 MapRightKey(“LocationID”); m、 ToTable(“三位”); }); } } 新数据库现在如下所示: Tables Locations PK ID (int) Name (varchar) TripLocations TripID (int) LocationID (int) Trips PK ID (int) Name (varchar) Begin (datetime) End (datetime) HomeCountry_ID (int) 桌子 位置 主键ID(int) 名称(varchar) 三重定位 TripID(int) 位置ID(内部) 旅行 主键ID(int) 名称(varchar) 开始(日期时间) 完(日期时间) 母国ID(国际) 在代码项目讨论中,它说:
因此,现有关系表存在一个小问题。我们可以通过重写OnModelCreating方法并使用代码优先的fluentapi添加映射来解决这个问题
由于我没有一个现有的关系表,老实说,我并不认为这一步是必需的,但我一直无法找到任何其他方法来创建适当的表结构。希望随着我对这项技术越来越熟悉,我能找到一种方法来解决重写OnModelCreating方法的需要 您是否使用fluent api或什么来创建关系?我需要看到这一点。@John目前我做这项工作的唯一目的是掌握我观看的演示文稿,并了解这对简单项目有多有用。我使用VisualStudio中的内置功能来构建模型,然后围绕模型创建db。创建控制器时,我能够选择数据上下文,它为我创建实体框架类以及创建它的文件。在Nuget控制台中,我可以使用Add Migration和Update Database命令来创建数据库以及在此过程中的任何更改。
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");
});
}
}
Tables
Locations
PK ID (int)
Name (varchar)
TripLocations
TripID (int)
LocationID (int)
Trips
PK ID (int)
Name (varchar)
Begin (datetime)
End (datetime)
HomeCountry_ID (int)