我一直在拼命地尝试从数据库中删除一个项目,但到目前为止还无法让它工作。我看到的错误信息是这样的:
"The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable."
我使用的是 EF4.1,带有 EDMX(数据库优先)和 POCO 对象。我为每种类型都有一个存储库和一个实现基本方法的通用存储库。
具体问题是当我想删除一个项目时。删除孩子不是问题 - 一切正常 - 问题是当我开始删除实体本身时。
考虑以下模型。我有一个实体“Foo”,它与“Bar”有一对多的关系。我在我的存储库中调用以下方法:
public override void Delete(Models.Foo entity)
{
//Load the child items...
base.Context.Entry(entity).Collection(x => x.Bars).Load();
//Bar
BarRepository barRep = new BarRepository();
foreach (var item in entity.Bars)
{
var obj = barRep.GetById(item.ID);
barRep.Delete(obj);
}
barRep.Save();
//First attempt
//base.Delete(entity);
//base.Save();
//Have to resort to some SQL
base.ExecuteSqlCommand(string.Format("delete from Foo where ID = {0}", entity.ID));
}
GenericRepository“删除”方法是:
public virtual void Delete(T entity)
{
_entities.Set<T>().Remove(entity);
}
GenericRepository“保存”方法很简单:
public virtual void Save()
{
_entities.SaveChanges();
}
我想上班是这样的:
//First attempt
//base.Delete(entity);
//base.Save();
但不幸的是(目前)我删除该项目的唯一方法是运行一些只调用_entities.Database.ExecuteSqlCommand(SQL) 的SQL。
我已经阅读了很多东西,但似乎没有任何效果。在尝试了解正在发生的事情时,我真的很感激一些帮助。
谢谢,
何塞