我有一些错误: EF 4: Removing child object from collection does not delete it - why?EF 4.1:从集合中删除子对象不会删除它 - 为什么?
当我删除,当我打电话SaveChanges()
孩子被删除父一子,它给出了如下错误信息:
操作失败:关系无法更改,因为一个或多个外键属性是不可空的。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性指定另一个非空值,或者必须删除不相关的对象。
但是对于DbContext和EF 4.1,“context.DeleteObject(recipe)”不存在。
有什么建议吗?
[编辑]
public void UpdateWithAttributes(Model model, IEnumerable<Entity> entities)
{
var modelOriginal = this.unitOfWork.Model.GetById(model.IModel);
this.unitOfWork.Context.Entry(modelOriginal).CurrentValues.SetValues(model);
UpdateEntityAttributeAssociations(modelOriginal, entities);
this.unitOfWork.Commit();
}
public void UpdateEntityAttributeAssociations(Model model, IEnumerable<Entity> current)
{
unitOfWork.Context.Entry(model).Collection(m => m.Entities).Load();
ICollection<Entity> original = model.Entities; // perhaps .ToList() necessary
// delete
if (original != null)
{
List<Entity> toDelete = GetToDelete(original, current);
foreach (Entity originalEntityToDelete in toDelete)
{
unitOfWork.Context.Entity.Remove(originalEntityToDelete);
}
}
// add, update
if (current != null)
{
foreach (Entity currentEntity in current)
{
// No need to set the UpdatedWhen. The trigger on the table will handle that.
if (original.Where(originalEntity => originalEntity.IEntity == currentEntity.IEntity).FirstOrDefault() == null)
{
model.Entities.Add(currentEntity);
}
}
}
}
感谢Slauma对你的响应使用你的代码我有另一个错误:DELETE语句与REFERENCE约束{0}发生冲突冲突发生在数据库\“MyDatabase \”,表\“{1} \”中,列'{2}'。\ r \ n声明已被终止。 – rad 2011-05-25 17:57:21
@rad:我不知道你应该编辑我最后一个问题的答案。有太多的缺失信息来详细了解问题并提供一个工作解决方案(至少对我而言)。 – Slauma 2011-05-25 18:05:01
@rad:我认为还有另一个实体指的是你刚刚试图删除的实体。 “{0}”,“{1}”和“{2}”的秘密内容应该给出一个相当重要的提示! – Slauma 2011-05-25 18:14:01