[英]Entity Framework lazy load
我有两个实体:
public class Product
{
[HiddenInput(DisplayValue=false)]
public int ProductID { get; set; }
[Required(ErrorMessage="Please enter a product name")]
public string Name { get; set; }
[Required(ErrorMessage = "Please enter a description")]
[DataType(DataType.MultilineText)]
public string Description { get; set; }
[Required]
[Range(0.01,double.MaxValue,ErrorMessage="Please enter positive price")]
public decimal Price { get; set; }
public Category Category { get; set; }
[HiddenInput(DisplayValue= false)]
public string ImageFileName { get; set; }
[HiddenInput(DisplayValue = false)]
public string ImageMimeType { get; set; }
}
和
public class Category
{
[HiddenInput(DisplayValue=false)]
public int CategoryID { get; set; }
[Required(ErrorMessage="Please enter a category name")]
public string Name { get; set; }
[Required(ErrorMessage = "Please enter a description")]
[DataType(DataType.MultilineText)]
public string Description { get; set; }
public ICollection<Product> Products { get; set; }
[HiddenInput(DisplayValue= false)]
public string ImageFileName { get; set; }
[HiddenInput(DisplayValue = false)]
public string ImageMimeType { get; set; }
}
当我试图以这种方式获得产品时
Product product = repository.Products.FirstOrDefault(p => p.ProductID == id);
类别字段为空。
没有product.Category.Load()和repository.Products.Include(“ Category”)...方法。
context.Configuration.LazyLoadingEnabled = false;
不影响。 上下文是下一个类的对象
public class EFDbContext:DbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categories { get; set; }
}
我应该如何加载必填字段?
谢谢
也许您的映射定义有问题。 您可以在类别表上执行GetAll吗? 您的Product.Category属性是否知道用于Category表的哪个外键?
在EF 4.1第6部分中使用DbContext的文章:加载相关实体解释了在急切或惰性模式下加载实体的不同方法。
当您使用context.Configuration.LazyLoadingEnabled = false
,您正在定义加载实体的全局方式 ,但如果需要,您可以通过执行以下操作来具体说明应如何加载每个属性:
public virtual Category Category { get; set; }
public virtual Category Category { get; set; }
public Category Category { get; set; }
public Category Category { get; set; }
因此,如果对您不起作用,我将检查您的映射定义,然后检查发送到您的数据库的sql查询。 您将确切地看到sql查询是否包含您的类别详细信息。
我知道2个选项来查看生成的sql。 您可以监视数据库或使用Mvc Mini Profiler 。 如果您使用的是DevArt dotConnect,那么您将有一个监视工具。
我刚刚尝试以这种方式获取Product对象:
Product product = (
from p in repository.Products.Include("Category")
where p.ProductID == id
select p
).SingleOrDefault();
和类别也被加载。 这是可能的解决方案。 但是有趣的是为什么我第一次使用时类别为空
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.