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

标签 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 中生成模型时,我看不到表格,而是在各自的 FK 表格中看到了与每一侧的两个集合的关联。所以我有一个 Positions 的集合在 Requirements ,以及 Requirements 的集合在 Positions .很公平,我明白这里发生了什么。

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

How to add or remove a many-to-many relationship in Entity Framework?

问题是,我看不出有什么方法可以通用化此功能,但是如果模型中定义了一个表,我可以看出这会相对容易。

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

我看过 this page随着使用 IDatabaseInitializer<>界面,但它似乎不起作用 - 我没有在图表中看到表格。

这会简化我当前项目中的很多事情。

最佳答案

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

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

数据库架构:[logger] m:m [logger_to_file_appender] m:m [file_appender] 我的联结表只有 2 个字段,FK,充当复合键。正如您所注意到的,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);
});

有时在 Entity Framework 中工作可能会令人沮丧,因为像这样基本的东西,我在 T-SQL 中需要 2 分钟才能完成,但我却花了大约一天的时间来征服:(。希望这些知识可以节省一些人的时间。

关于c# - EF5 - 数据库首先创建多对多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18119508/

相关文章:

c# - 如何在c#中显示返回的List

C# 日期时间数组

entity-framework - SQLite + Entity Framework 4.0 + Identity 列/Autoinc 不起作用

hibernate - 未调用 JPA EventListener 方法更改多对多集合?

c# - 为什么无法识别 bool 默认值 (false)?

c# - 升级到VS 2010 framework 4.0的项目中的程序集资源FileNotFoundException

c# - AspNetUsers (Identity) 与自定义数据库中其他表之间的多对多关系

C# EF 5.0 向 MySQL 数据库添加百万条记录需要数小时

MySQL 多对多查询。是否可以?

c# - 删除 Entity Framework Code First 中的联结表记录 (M :M)