【问题标题】:EF 4.3 & CodeFirst: One-to-many navigation properties loads as nulls without entity proxyEF 4.3 & CodeFirst:一对多导航属性加载为空值,没有实体代理
【发布时间】:2012-03-18 09:14:58
【问题描述】:

接下来是问题 - 我有 2 个具有一对多关系的实体:

public class Schema
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public Guid SchemaId { get; set; }

    public string Name { get; set; }

    public string Content { get; set; }

    public string ElementName { get; set; }

    public List<Element> Elements { get; set; }
}

public class Element
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public Guid ElementId { get; set; }

    public Guid SchemaId { get; set; }

    public string Content { get; set; }

    public Schema InSchema { get; set; }
}

并且项目引用了 EntityFramework v4.3 包。 在数据库中存储一些具有相关元素的模式后,我加载模式列表(例如,var schemasList=context.Schemas.ToList())。在此之后,在 Elements 属性值的所有 Schema 实例中为空。现在我通过为实体添加动态代理来解决这个问题,但这在许多开发场景中都有一些不好的影响(例如,保存可能会导致“通过多个上下文跟踪实体”错误)。 感谢您对此问题的任何帮助。

【问题讨论】:

    标签: c# entity-framework-4.1 code-first entity-framework-4.3


    【解决方案1】:

    您在查询中使用过 .Include 吗?

    from s in Schema.Include(sc=>sc.Elements)
    select s;
    

    注意你需要

    using System.Data.Entity 
    

    使用包含

    【讨论】:

    • CodeFirst 有必要吗?
    • @DrAlligieri:视情况而定,我有一台不需要输入的服务器和另一台需要输入的服务器。需要遍历业务层。无论如何,这是必需的,否则您将进行延迟加载(仅加载需要的内容),因此现在您使用 Include 说您必须在 Elements 表中 JOIN (可以是如果您不需要它,则认为会影响性能)。
    • 好的,tnx 回答。我熟悉延迟加载概念(不是很喜欢它;))。还有一个问题 - Include 仅加载 sc.Elements (ak List) 项目 (ak Element) 简单属性或导航(如果它有另一个复杂的类似 List 的导航道具)。
    • Include 是加载相关实体的绝对必要条件;默认情况下,它会从数据库中加载整个对象(因此并不是真正的延迟加载...),但不会加载任何相关的对象,除了您使用 Include 明确请求的对象。
    猜你喜欢
    • 1970-01-01
    • 2012-07-06
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多