我一直在拼命地从数据库中删除一个项目,但到目前为止还无法让它工作。我看到的错误信息就是这个:
"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”有1对多的关系。我在我的存储库中调用以下方法:
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。
我读过很多东西,但似乎没什么用。我真的很感激一些帮助,试图了解正在发生的事情。
谢谢,
何