Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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# 在EDMX(EF 4.3)中使用m:n表,而不将其与相关表关联_C#_.net_Linq_Entity Framework_Edmx - Fatal编程技术网

C# 在EDMX(EF 4.3)中使用m:n表,而不将其与相关表关联

C# 在EDMX(EF 4.3)中使用m:n表,而不将其与相关表关联,c#,.net,linq,entity-framework,edmx,C#,.net,Linq,Entity Framework,Edmx,我有一个设计糟糕的数据库,其中TableA通过m:n映射表映射到表B、C、D 当我在EDMX中包含映射表时,我得到一个运行时错误,即entite的键列与表的键列不匹配。错误3002: 我发现没有办法避免这种情况,即使在删除EDMX模型中的额外列时也是如此。当我这样做的时候,我得到了关于多重性必须为1的其他错误 事实上,数据库不能也不得更改。 那么,有没有一种方法可以在没有关联的情况下在EDMX中显示m:n映射表? 我这样问是因为映射表不是作为一个表而“可见”的,而是作为一个关联(在设计器中,其他

我有一个设计糟糕的数据库,其中TableA通过m:n映射表映射到表B、C、D

当我在EDMX中包含映射表时,我得到一个运行时错误,即entite的键列与表的键列不匹配。错误3002:

我发现没有办法避免这种情况,即使在删除EDMX模型中的额外列时也是如此。当我这样做的时候,我得到了关于多重性必须为1的其他错误

事实上,数据库不能也不得更改。

那么,有没有一种方法可以在没有关联的情况下在EDMX中显示m:n映射表?
我这样问是因为映射表不是作为一个表而“可见”的,而是作为一个关联(在设计器中,其他两个表之间有一条线。

虽然可能有更好的方法,但Gert所说的是我推荐的:

  • 复制数据库(至少是架构)
  • 将列添加到映射表中
  • 基于该版本更新edmx(额外的列将意味着该表将作为“真实”包含)
  • 从edmx中删除额外的列
另一个可能有效的替代方案(以前从未尝试过)

  • 更新模型以仅包括映射表(确保它首先不包括其他两个表,至少不包括这两个表)
  • 这将使其成为模型中的“真实表格”
  • 更新模型以包含其他表

您始终可以手动创建/映射,但希望上述操作之一比手动创建/映射更快/更容易。

是的,EF只将纯联接表映射到关联中是明智的。在您的情况下,您可以从只有映射表的edmx开始,根据需要修改它,然后添加其他表。