我正在尝试使用entity framework 4实现自连接,我的用例如下:
public class Category
{
/// <summary>
/// category id
/// </summary>
[Key]
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
public int CatID { get; set; }
/// <summary>
/// category name
/// </summary>
[Required(ErrorMessage="Vui lòng nhập tên.")]
[MaxLength(100, ErrorMessage="Tên chỉ có độ dài tối đa 100 ký tự.")]
public string CatName { get; set; }
/// <summary>
/// parent category id
/// self join :)
/// </summary>
public int? ParentID { get; set; }
/// <summary>
/// parent category
/// </summary>
[ForeignKey("ParentID")]
public virtual Category ParentCategory { get; set; }
/// <summary>
/// products list
/// </summary>
public virtual IEnumerable<Product> Products { get; set; }
/// <summary>
/// categories which are associate with this category
/// </summary>
public virtual IEnumerable<Category> Categories { get; set; }
}
如您所见,子类别将通过外键引用父类别。有了这个实现,我可以通过使用外键属性延迟加载ParentCategory。但子集合分类并不是延迟加载。如何强制延迟加载子集合?
编辑
如果我没有过滤结果集,则父集合和子集合的延迟加载将正常工作:
var cat = context.Category.ToList();
Buf如果我过滤结果集,则不会延迟加载子集合
var cat = from entity in context.Category
where entity.Parent == null
select entity;
//child collection will be null
使用“包含”方法加载集合:
var selectedList = entity.where(m=>m.parent==null).include(m=>m.Categories).tolist();
考虑以下(非常简化的)实体: 在我的映射器中,我可以设置用户罚款,但是一旦执行以下代码(在数据库中保留任何更改之前)
我定义了两个具有一对多外键关系的类,它们首先由数据库生成。 我创建了一个代理对象,并将其添加到DBContext中。 然后我设置了一个外键属性并尝试访问相应的导航属性。 设置外键属性标签\u id不会加载导航属性标签。代码中的最后一行返回。 这些类遵循此处列出的创建POCO代理的要求(调试显示已创建代理car对象,因此我相信所有要求都已满足)。 数据库表标签包含主键为4的项。 我不是在这里调用或,
我从这个网站上读到了关于懒惰加载的内容。启用或禁用LazyLoding “如果我们请求已启用LazyLoading的学生列表,数据提供程序将从数据库中获取所有学生,但每个StudentAddress属性在显式访问该属性之前不会加载。” 此语句表示,当我将设置为true时,将不会加载相关数据。然而 如果我设置延迟加载启用=true,上面的代码返回所有特技与他们的老师和地址。我在这里错过了什么?有人能
我正在使用Play Framework v.2.6.3和用于SQL访问的JPA解决方案。 当我在实体上设置FetchType.Lazy时,我会收到以下错误消息: play.api.http。HttpErrorHandlerExceptions$$anon$1:执行异常[[RuntimeException:java.lang.IllegalArgumentException:未能延迟初始化角色集合:
我正在使用启用延迟加载的实体框架5。我有以下代码: 但这有意义吗?我想确保公共属性订阅从不为null。由于虚拟实体框架覆盖了getter和setter以提供延迟加载功能。 我需要这个字段还是我可以只使用一个自动属性,如果没有订阅,我得到一个空列表?
当将实体模型转换为DTO时,我对Entity Framework Core(v2.0.1)有一个问题。基本上,通过该短语的任何其他版本,当我不想加载时,它是延迟加载的。这是一个简单的。NET Core Console应用程序(带有Microsoft. EntityFrameworkCore. SqlServer(2.0.1)包)。 现在,当执行方法来检索数据时,它正在执行以下SQL 如您所见,它没