【问题标题】:Empty assosiated entities in EF 6.0 Fluent ApiEF 6.0 Fluent Api 中的空关联实体
【发布时间】:2015-02-12 05:49:34
【问题描述】:

我尝试使用 Entity Framework 6 实现 1..0 关系。我使用实例关联。我尝试重复网络和论坛中的示例,但不知何故它对我不起作用。请帮忙。

实体:

  public class CustomerWithFk : Item  // Item contains Id
    {
        public string Name { get; protected set; }
        public virtual City City { get; set; }      // relation property. Can be 1 or 0
        public virtual Product Product { get; set; }
        public decimal Money { get; protected set; }
    }

    public class City : Item
    {
        public string Name { get; protected set; }
    }

映射:

public CityMap()
{
    ToTable("Cities");
    HasKey(c => c.Id);
}

public CustomerFkAssosiationMap()
{
    ToTable("Customers");
    HasKey(c => c.Id);

    HasRequired(g => g.City)
        .WithRequiredDependent();

    HasRequired(g => g.Product)
                .WithRequiredDependent()
                .Map(x => x.MapKey("ProductId"));
}

数据库表:

SQL Profiler 为我提供了 enxt SQL 请求:

SELECT 
    1 AS [C1], 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Name] AS [Name], 
    [Extent1].[Money] AS [Money], 
    [Extent1].[CityId] AS [CityId], 
    [Extent1].[ProductId] AS [ProductId]
    FROM [dbo].[Customers] AS [Extent1]

因此,我在这里看不到任何从城市或产品加载数据的连接。 结果为空:

我尝试了不同的映射选项,例如:HasOptional、WithRequiredPrincipal,尝试将客户属性添加到 City(虽然它不正确,而且 City 不必了解客户) 没有什么帮助。关联实体始终为空。 我哪里错了?

【问题讨论】:

    标签: sql entity-framework mapping one-to-one fluent


    【解决方案1】:

    问题是您没有包含相关对象。使用Include 尝试这样的事情:

    var list = context.CustomerWithFk
                      .Include("City")
                      .Include("Product");
    

    这告诉 Entity Framework,您希望将客户连同城市和产品一起拉回。如果您有兴趣,可以阅读以下内容:http://msdn.microsoft.com/en-us/data/jj574232.aspx

    编辑:您还可以通过将其添加到您的上下文中来启用延迟加载(根据您的评论,我相信这是您所追求的):

    context.ContextOptions.LazyLoadingEnabled = true;
    

    在此处阅读有关延迟加载的更多信息:http://msdn.microsoft.com/en-us/library/vstudio/dd456846(v=vs.100).aspx

    【讨论】:

    • 谢谢。但是有没有什么办法不使用像 Include 和 FK 在后台 loed 这样的显式命令?我敢肯定,昨天,在一些映射实验中,我在没有调用 Include 的情况下得到了填充属性的正确结果。看起来我已经非常接近解决方案了,但是我瞎了眼,看不到我的错误......
    • 查看编辑。我相信您正在寻找延迟加载。
    猜你喜欢
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多