【发布时间】:2012-03-28 12:40:06
【问题描述】:
最近,我们为实体框架关闭了延迟加载和代理生成。在此之前,在我们向 EF 提交新更改后,我们将收到整个对象图。我现在正在做的是,在提交之后,我在存储库上调用 FindById 方法来取回新对象(我将导航属性放回 newley 创建的对象上)。我的问题是,这是创建后的标准做法,还是客户端应该负责再次调用服务以获取新创建的对象?
服务上的保存方法:
public SomeObject Create(SomeObject someObject)
{
_repository.Add(someObject);
_repository.UnitOfwork.Commit()
//this did not exist when lazy loading and proxy generation were enabled.
var newObject = _repository.FindById(someObject.Id);
return newObject;
//Before we would jsut return the created object because everything was loaded.
//return someObject
}
我只是想知道这是否是在创建对象并禁用延迟加载和代理创建之后的最佳实践。我很想知道其他开发者是如何处理这个问题的。
【问题讨论】:
-
我不明白你为什么要加载一个你刚刚保存并且仍然在手边的对象。如果
FindById使用与Commit相同的上下文,newObject将仅引用与someObject相同的对象,该对象仍附加到上下文。我的猜测是您的问题与加载导航属性有关,但我不清楚。FindById是否包含Includes 的所有导航属性,它们应该取代以前的延迟加载? -
@Slauma,您对包含和导航属性是正确的。我确实想在提交后加载导航属性。
标签: entity-framework-4.1 service-layer