首先,我的UoW继承自DbContext。
我转而使用Unity.Mvc3并将此行添加到我的注册中:
Container.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager());
一旦我转向此,我对实体框架的延迟加载似乎停止了工作。这是一个例子:
public class Process
{
public Guid Id {get;set;}
public virtual Guid? StatusId {get;set;} //this is the FK EF uses.
public virtual Status Status {get;set;}
}
public class Status
{
public Guid ID {get;set;}
public Name {get;set;}
}
//DTOs
public class ProcessDto
{
public Guid Id {get;set;}
public Guid? StatusId {get;set;} //this is the FK EF uses.
public StatusDto Status {get;set;}
}
public class StatusDto
{
public Guid ID {get;set;}
public Name {get;set;}
}
在我们调用Cre
之前,Satuses被加载到上下文中//Process Service
public ProcessDto Create(ProcessDto dto)
{
var processEntity = new Process(){StatusId = dto.StatusId}
processRepository.Add(processEntity)
unitOfWork.Commit()
//at this point, before using Unity.Mvc3 the Status would be proxied into the processEntity. Moving to Unity.Mvc3 it is like Lazy Loading stopped working.
return Mapper.Map<Process,ProcessDto>(processEntity);
}
单步执行代码后,请求才会在Create调用之后终止。不确定是否有人遇到类似的事情。
答案 0 :(得分:0)
您的Status
属性不是虚拟的,因此实体永远不会被代理延迟加载,Unity或任何其他IoC容器对此没有影响。
你也直接使用Process
构造函数 - 如果你创建了Process的实例,它就无法代理,延迟加载也无法工作。您必须在Create
上使用DbSet<Process>
工厂方法来获取代理实体。