嗨,我正在使用实体框架来设置我的数据库。我有一对多的关系实体,我只想删除父实体而不进行级联删除。我从父母那里删除时遇到了错误,但我真的想保留我的孩子作为录音的原因。有什么方法可以只删除父母而不会出错?
问问题
1329 次
1 回答
2
这是一个老问题,但我今天遇到了这个问题,所以我将分享我找到的解决方案。
长话短说,您需要预先加载您的子关联。假设您的关系设置正确并且 aFoo
有 many Bars
,则此代码应该完全符合您的要求:
public void Delete(Guid fooId)
{
using (var context = new MyDbContext())
{
var foo = context.Foos.Include("Bars").FirstOrDefault(foo => foo.Id == fooId);
if (foo != null)
{
context.Foos.Remove(foo);
context.SaveChanges();
}
}
}
这里的关键是调用.Include
. 否则,更新将因外键违规而失败。
现在,当我说我假设你的关系设置正确时,我的意思是它们应该看起来像这样。
// Foo.cs
public class Foo
{
public Guid Id { get; set; }
public ICollection<Bar> Bars { get; set; }
}
// Bar.cs
public class Bar
{
public Guid Id { get; set; }
public Guid? FooId { get; set; }
public virtual Foo Foo { get; set; }
}
// MyDbContext
modelBuilder.Entity<Foo>()
.HasMany(e => e.Bars)
.WithRequired(e => e.Foo)
.HasForeignKey(e => e.FooId)
.WillCascadeOnDelete(false);
于 2015-10-06T04:17:09.990 回答