ef代码优先-自动延迟加载.实体框架



我有一个实体和一个ViewModel

public class Order
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    [ForeignKey("DeliveryMethod")]
    public int DeliveryMethodId { get; set; }
    public virtual RouteDeliveryMethod DeliveryMethod { get; set; }
}

public class OrderViewModel
{
    public string Name { get; set; }
    public int? DeliveryMethodId { get; set; }
}

我的控制器接收视图模型并使用automapper将其映射回实体

[HttpPost]
public ActionResult GetQuote(OrderViewModel ordervm)
{
    Order order = Mapper.Map<Order>(ordervm);
    // Do something with the order...
    return View();
}

这一切都很好,但是在它完成了映射回Order对象之后,它没有加载DeliveryMethod, DeliveryMethodId有一个有效值,但是DeliveryMethod总是空的。

由于延迟加载,DeliveryMethod不应该加载吗?

Automapper只查看映射的属性。如果您没有将目标属性DeliveryMethod映射到任何源属性,那么在映射期间将不会命中它。如果没有执行属性getter,则表示实体没有惰性加载。

但是即使这个属性被选中了,它也不会被惰性加载。因为在映射过程中,Automapper会创建新的Order类实例。但是对于延迟加载,您需要一个order代理类的实例,其中包含DbContext。当您尝试读取相关实体的值时,该代理会加载相关实体。对于普通Order类实例,惰性加载不能工作。

最新更新