【发布时间】:2011-12-16 20:11:08
【问题描述】:
我试图不让我的业务逻辑知道我的数据层的内部运作,反之亦然。
但实体框架让这变得困难。我可以在不引用 ObjectContext 的情况下插入集合(在我的业务层中):
order.Containers.Add(new Container { ContainerId = containerId, Order = order });
当需要在数据层中执行 SaveChanges() 时,这可以节省很多时间。
但是要从集合中删除一个项目,我需要一个 ObjectContext 的引用。 (我是guide to deleting EF Entities 中的案例#1。)如果我这样做:
delContainers.ForEach(container => order.Containers.Remove(container));
然后当我调用SaveChanges() 时,我收到一个异常,告诉我我需要删除对象以及引用。
所以,我的选择是:
- 将委托传递给将调用实体框架 ObjectContext Delete 方法的业务逻辑。
-
或者(我希望)找到一种方法来删除所有引用的实体并实际删除它们。(就在我的数据层中调用
SaveChanges()之前。)
有人知道怎么做吗?
更新:
我试过了:
// Add an event when Save Changes is called
this.ObjectContext.SavingChanges += OnSavingChanges;
...
void OnSavingChanges(object sender, EventArgs e)
{
var objectStateEntries = ObjectContext.ObjectStateManager
.GetObjectStateEntries(EntityState.Deleted);
foreach (var objectStateEntry in objectStateEntries)
{
if (objectStateEntry.IsRelationship)
{
// Find some way to delete the related entity
}
}
}
但是,即使我删除了一个关系,删除的项目集也是空的。
(我也尝试查看所有项目,但我的关系不在那里。显然,ObjectStateManager 有一些基本的东西我不明白。)
【问题讨论】:
标签: c# .net entity-framework entity-framework-4