entity-framework - 如何在 Edmx Designer 中对多对多关系启用级联删除

标签 entity-framework visual-studio-2012 entity-framework-5 edmx-designer

我正在使用 VS2012 和实体设计器来生成数据库和模型。我有一个非常基本的 Table1 到 Table1and2JoinTable 到 Table2 的场景。像学生,类(class),学生类(class)之类的东西。您可以在许多类(class)有许多学生。我想要一个级联删除。因此,如果您删除一个学生,StudentClass 连接表中的任何行都会针对该学生 ID 删除。与删除类(class)相同,该类(class) ID 的 StudentClass 中的任何行都将被删除。在设计器中设置多对多关联并设置级联删除选项后,尝试生成数据库时会出现以下错误:

Error 132: End 'Student' on relationship 'Model1.StudentClass' cannot have operation specified since its multiplicity is ''. Operations cannot be specified on ends with multiplicity ''.



这是一个小例子:

Designer

这是创建的关联:

enter image description here

以及由此产生的错误消息:

enter image description here

下面是生成数据库表的部分 SQL 代码:
-- Creating foreign key on [Students_Id] in table 'StudentClass'
ALTER TABLE [dbo].[StudentClass]
ADD CONSTRAINT [FK_StudentClass_Student]
    FOREIGN KEY ([Students_Id])
    REFERENCES [dbo].[Students]
        ([Id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;
-- This should be ON DELETE CASCADE ON UPDATE NO ACTION;
GO

-- Creating foreign key on [Classes_Id] in table 'StudentClass'
ALTER TABLE [dbo].[StudentClass]
ADD CONSTRAINT [FK_StudentClass_Class]
    FOREIGN KEY ([Classes_Id])
    REFERENCES [dbo].[Classes]
        ([Id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;
-- This should be ON DELETE CASCADE ON UPDATE NO ACTION;
GO

我知道如何通过编辑数据库脚本并添加 on delete 级联选项来解决这个问题。但是,我不想这样做,因为随着项目的发展,我将多次回到设计师身边,而且我不想每次都记住这一步。

有没有人想出如何解决这个问题?

最佳答案

这似乎是一个 edmx 限制,我不太明白。代码优先完全能够生成具有两个级联 ON DELETE 约束的连接表,但模型优先和数据库优先不允许在 edmx 中进行相同的配置。通常,级联操作配置在关联的“一端”。也许检查'* 上级联操作的有效性太复杂了。 ' 结束(仅当两端都是 ' * ' 时)。

为了在基于 edmx 模型的上下文中发生级联删除,您必须加载父级及其子级,然后删除父级。

var cls = db.Classes.Include(c => c.Students).Single(c => c.Id = 1);
db.Classes.Remove(cls);
db.SaveChanges();

执行的SQL语句显示Class从数据库中获取 JOIN声明 Student .然后是StudentClass s 和 Class分别删除。

显然,这比在数据库中启用级联删除要昂贵得多。

当然,在每次生成之后修改 DDL 的解决方法并不吸引人。但我认为唯一的选择是制作 StudentClass模型的一部分,并在新关联的“一个”端配置级联删除。或者以代码为先。

关于entity-framework - 如何在 Edmx Designer 中对多对多关系启用级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20692826/

相关文章:

c# - EntityType '' IdentityUserRole' 没有键定义错误

c# - DbContext.SaveChangesAsync 异常处理

c# - Entity Framework 不将数据刷新到数据库

C# 为什么 System.IO.File.Exists 不断出错?

c# - 以编程方式将现有项目添加到新的 VS2012 解决方案失败

visual-studio-2012 - 无法解析外部模块 typescript

entity-framework-5 - Code First 代码生成试图创建模型?

entity-framework - EF 5. “Automatic migration was not applied because it would result in data loss”-仅更改了列名

c# - 在什么情况下我需要 Entity Framework 中的外键和导航属性

C# WebAPI 交叉更新多个表的内连接数据