Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# EF5-数据库首先创建多对多表_C#_Entity Framework_Many To Many_Ef Database First - Fatal编程技术网

C# EF5-数据库首先创建多对多表

C# EF5-数据库首先创建多对多表,c#,entity-framework,many-to-many,ef-database-first,C#,Entity Framework,Many To Many,Ef Database First,我在数据库中有多对多关系: CREATE TABLE [dbo].[PositionRequirements]( [Position_ID] [int] NOT NULL, [Requirement_ID] [int] NOT NULL, CONSTRAINT [PK_PositionRequirements] PRIMARY KEY CLUSTERED ( [Position_ID] ASC, [Requirement_ID] ASC ) 当我在EF5中生

我在数据库中有多对多关系:

CREATE TABLE [dbo].[PositionRequirements](
    [Position_ID] [int] NOT NULL,
    [Requirement_ID] [int] NOT NULL,
 CONSTRAINT [PK_PositionRequirements] PRIMARY KEY CLUSTERED 
(
    [Position_ID] ASC,
    [Requirement_ID] ASC
)
当我在EF5中生成模型时,我看不到表,而是在各自的FK表中与每侧的两个集合关联。因此,我在
需求
中收集了
职位
,在
职位
中收集了
需求
。公平地说,我明白这里发生了什么

我偶然发现了这个问题,展示了如何删除多对多行:

但问题是,我看不到任何方法来泛化这个功能,但是如果模型中定义了一个表,我可以看出这将相对容易

有没有办法“欺骗”EF来创建M-M表,而不是关联集合

我已经看到了如何使用
IDatabaseInitializer
接口,但是它似乎不起作用-我在图中没有看到表


这将简化我当前项目中的许多事情。

希望这会有所帮助。在我的场景中,我有一个列表框,每个项目都嵌入了复选框。我希望能够添加/删除选中的项目

下面的“dto”对象是从客户端发送的。它检查列表中每个项目的选定状态。如果有人知道任何改进方法,请留下反馈

DB Schema:[logger]m:m[logger\u to\u file\u appender]m:m[file\u appender] 我的连接表只有两个字段FKs,用作复合键。正如您所注意到的,EDMX文件将不包含此连接表。下面是我的解决方案

file_appender selectedAppender = context.file_appender.Find(dto.Id);

int[] ids = dto.Loggers.Where(x => !x.Selected).Select(x => x.Id).ToArray();
var loggers_to_delete = selectedAppender.logger.Where(x => ids.Contains(x.id));
loggers_to_delete.ToList().ForEach(x =>
{
    selectedAppender.logger.Remove(x);
});

ids = dto.Loggers.Where(x => x.Selected).Select(x => x.Id).ToArray();
var loggers_to_add = context.logger.Where(x => ids.Contains(x.id));
loggers_to_add.ToList().ForEach(x =>
{
    selectedAppender.logger.Add(x);
});

有时,在实体框架中工作可能会令人沮丧,因为像这样的基础工作(我需要2分钟才能在T-SQL中完成)花了我大约一天的时间来完成:(.希望这方面的知识可以节省一些时间。

如果向联接表添加额外的标量属性会发生什么?太棒了,谢谢…太简单了(虽然仍然有点黑客,但它完成了工作!)为了清楚起见,您需要在数据库中添加另一个字段,删除关联(以及两个表!),然后从数据库中刷新模型-这将创建新的表至少现在我们已经确定此行为是“设计的”。应该可以覆盖它。也许其他人会对您的问题给出真正的答案:-)。在此期间,您可以继续解决此问题。