Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用数据库迁移和EF 4.3以及代码优先的方法来创建关系表?_C#_Asp.net Mvc 4_Database Migration_Entity Framework 4.3 - Fatal编程技术网

C# 如何使用数据库迁移和EF 4.3以及代码优先的方法来创建关系表?

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

我一直在尝试使用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 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)