Ton*_*ony 14 c# entity-framework foreign-keys cascading-deletes
我在删除Entity Framework 4.1中的相关行时遇到问题.我有关系表
书1 <--->*BookFormats
我已经设置了删除级联:
ALTER TABLE [dbo].[BookFormats] WITH CHECK ADD CONSTRAINT [FK_BookFormats_Book]
FOREIGN KEY([BookID]) REFERENCES [dbo].[Book] ([BookID]) on delete cascade
Run Code Online (Sandbox Code Playgroud)
EDMX属性

然后,我想删除BokFormats与我的Book对象相关的所有项目:
var originalBook = m.db.Book.First(x => x.BookID == bookId);
originalBook.BookFormats.Clear();
m.db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
但是,我得到错误:
操作失败:无法更改关系,因为一个或多个外键属性不可为空.当对关系进行更改时,相关的外键属性将设置为空值.如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象.
我没有关于如何删除这些对象的想法.有任何想法吗?
Say*_*kor 17
您可以使用RemoveRange:
m.db.BookFormats.RemoveRange(originalBook.BookFormats);
m.db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
但这适用于EF 6.0
Vit*_*nin 11
级联删除概念如下:
当您Book从数据库BookFormats中删除时,SQL Server将删除所有相关内容(请注意,删除Book将通过EF或原始SQL进行删除无关紧要).因此它与你的任务无关:"我想删除所有BookFormats与我相关的东西Book".要完成它,你需要这样的东西:
foreach(var m in m.db.BookFormats.Where(f=>f.BookID == bookID))
{
m.db.BookFormats.Remove(m);
}
m.db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)