gpt4 book ai didi

asp.net-mvc-3 - 将 Unity.Mvc3 与 HierarchicalLifetimeManager 和工作单元模式一起使用不再延迟加载

转载 作者:行者123 更新时间:2023-12-02 05:07:42 30 4
gpt4 key购买 nike

首先,我的 UoW 继承自 DbContext。

我转而使用 Unity.Mvc3 并将这一行添加到我的注册中:

Container.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager());

一旦我转向这个,我对 Entity Framework 的延迟加载似乎就停止工作了。这是一个例子:

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;}
}

Satuses 在我们调用 Cre 之前加载到上下文中

//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 之后请求才会终止。不确定是否有人遇到过类似的事情。

最佳答案

你的 Status属性不是虚拟的,因此永远不能代理实体进行延迟加载,Unity 或任何其他 IoC 容器对此没有影响。

你也在使用 Process直接构造函数 - 如果您创建 Process 的实例,则它无法被代理并且延迟加载无法工作。您必须使用 Create DbSet<Process> 上的工厂方法获取代理实体。

关于asp.net-mvc-3 - 将 Unity.Mvc3 与 HierarchicalLifetimeManager 和工作单元模式一起使用不再延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9178774/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com