C# 首先在EF6代码中创建多对多关系

C# 首先在EF6代码中创建多对多关系,c#,.net-core,entity-framework-6,ef-code-first,C#,.net Core,Entity Framework 6,Ef Code First,我试图首先使用代码在两个表之间创建多对多关系 我有一个类似下面的东西 public class Railroad { public int Id { get; set; } // Other members... public ICollection<StorageLocation> StorageLocations { get; set; } } public class StorageLocation { public int Id {

我试图首先使用代码在两个表之间创建多对多关系

我有一个类似下面的东西

public class Railroad
{

    public int Id { get; set; }

    // Other members...

    public ICollection<StorageLocation> StorageLocations { get; set; }

}

public class StorageLocation
{

    public int Id { get; set; }

    public Provider Provider { get; set; }

    // Other members

    public ICollection<Railroad> Railroads { get; set; }

}
公共级铁路
{
公共int Id{get;set;}
//其他成员。。。
公共ICollection存储位置{get;set;}
}
公共类存储位置
{
公共int Id{get;set;}
公共提供程序{get;set;}
//其他成员
公共ICollection铁路{get;set;}
}
我读到一篇文章说这是正确的方法。但是当我尝试构建迁移时,我得到了一个错误

无法确定“ICollection”类型的导航属性“Railway.StorageLocations”表示的关系。手动配置关系,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.ignore”忽略此属性


你确定你没有在EF Core上吗? 这在EF Core中以前支持,但现在不支持:

在Entity Framework的早期版本中,此模型定义足以让EF暗示正确的关系类型并为其生成联接表。在EF Core中,需要在模型中包含一个实体来表示联接表,然后将导航属性添加到指向联接实体的多对多关系的任一侧:


你确定你没有在EF Core上吗? 这在EF Core中以前支持,但现在不支持:

在Entity Framework的早期版本中,此模型定义足以让EF暗示正确的关系类型并为其生成联接表。在EF Core中,需要在模型中包含一个实体来表示联接表,然后将导航属性添加到指向联接实体的多对多关系的任一侧:


这应该可以做到,但可能存在其他导航属性的干扰。如果有更多的导航属性,你能显示所有的导航属性吗?@GertArnold:有一个,我已经添加了一个<代码>提供程序本身没有导航属性。我不认为这会导致问题。这应该可以做到,但可能有其他导航属性会干扰。如果有更多的导航属性,你能显示所有的导航属性吗?@GertArnold:有一个,我已经添加了一个<代码>提供程序本身没有导航属性。我看不出这会导致什么问题。对于我来说,我们为了使用.NETCore的特权而放弃了多少工作特性似乎很可怜。我正在使用.NETCore3。不确定这篇文章是什么时候写的。EF6.3和更高版本支持.net标准2.1,所以在.net core 3中仍然无法判断您使用的是哪个EF版本。它可以是6.4.4(当前EF6版本)或EF core 3。可能是后者。@GertArnold谢谢你有趣的观点,在这种情况下,似乎是后者基于错误:)@GertArnold:这有区别吗?您是否有信息表明这已在较新版本中实施?我不知道如何立即查看我使用的是哪个版本,但我使用的是Visual Studio 16.6.0,并且刚刚创建了该项目,因此我假设它是VS的最新版本。@GertArnold看起来是状态:进行中。对于我来说,我们为了使用.NET Core的特权而放弃了多少工作功能似乎很可怜。我正在使用.NETCore3。不确定这篇文章是什么时候写的。EF6.3和更高版本支持.net标准2.1,所以在.net core 3中仍然无法判断您使用的是哪个EF版本。它可以是6.4.4(当前EF6版本)或EF core 3。可能是后者。@GertArnold谢谢你有趣的观点,在这种情况下,似乎是后者基于错误:)@GertArnold:这有区别吗?您是否有信息表明这已在较新版本中实施?我现在不知道如何查看我使用的是哪个版本,但我使用的是Visual Studio 16.6.0,并且刚刚创建了该项目,因此我假设它是VS.GertArnold最新发布的版本。看起来它的状态是:进行中。