Entity Framework on delete cascade(删除级联上的实体框架)
问题描述
我在删除 Entity Framework 4.1 中的相关行时遇到问题.我有关系表
I have problem with deleting related rows in Entity Framework 4.1. I have tables with relations
书 1<--->* 书本格式
Book 1<--->* BookFormats
我已经设置了 on delete 级联:
I have set the on delete cascade:
ALTER TABLE [dbo].[BookFormats] WITH CHECK ADD CONSTRAINT [FK_BookFormats_Book]
FOREIGN KEY([BookID]) REFERENCES [dbo].[Book] ([BookID]) on delete cascade
EDMX 属性
然后,我想删除与我的 Book 对象相关的所有 BokFormats 项:
Then, I want to remove the all BokFormats items related to my Book object:
var originalBook = m.db.Book.First(x => x.BookID == bookId);
originalBook.BookFormats.Clear();
m.db.SaveChanges();
但是,我得到了错误:
操作失败:无法更改关系,因为一个或多个外键属性不可为空.当一个对关系进行更改,相关的外键属性是设置为空值.如果外键不支持空值,必须定义一个新的关系,外键属性必须是分配了另一个非空值,或者不相关的对象必须是已删除.
The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
我想不出如何删除这些对象.有什么想法吗?
I ran out of ideas on how to delete these objects. Any ideas?
推荐答案
级联删除概念如下:
当您从数据库中删除 Book 时,SQL Server 将为您删除所有相关的 BookFormats(请注意,如何删除 并不重要)Book 将通过 EF 或原始 SQL 启动).因此,它与您的任务无关:我想删除与我的 Book 相关的所有 BookFormats".要完成它,您需要这样的东西:
When you delete Book from the DB all related BookFormats will be deleted for you by SQL Server (please note that it doesn't matter how deletion of Book will be initiated via EF or raw SQL). Thus it has nothing to do with your task: "I want to delete all BookFormats related to my Book". To accomplish it you need something like this:
foreach(var m in m.db.BookFormats.Where(f=>f.BookID == bookID))
{
m.db.BookFormats.Remove(m);
}
m.db.SaveChanges();
这篇关于删除级联上的实体框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:删除级联上的实体框架
基础教程推荐
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- WPF 模态进度窗口 2022-01-01
- C# 从 List<List<int>> 中删除重 2022-01-01
