【问题标题】:EF Core Use .Include with Parent-Child-relation in same tableEF Core Use .Include with Parent-Child-relation in the same table
【发布时间】:2019-10-23 09:54:41
【问题描述】:

我有一张桌子[dbo].[Product] 喜欢

ProductID | Description | OtherProductVariantID

其中OtherProductVariantID同一张表 和对应的产品实体的ProductID

public class Product
{
        public int ProductID {get; set;}
        public string Description{get; set;}

        public int? OtherProductVariantID {get; set;}
        public virtual Product VariantProduct {get; set;}
        public virtual ICollection<Product> VariantProducts { get; set; }
}

它是通过 Fluent-API 配置的,如下所示:

modelBuilder.Entity<Product>(entity =>
{
        entity.HasOne(d => d.VariantProduct)
                .WithMany(p => p.VariantProducts)
                .HasForeignKey(d => d.OtherProductVariant)
                .HasConstraintName("FK_Product_OtherProductVariant");
});

[人类语言]

我想要的是加载一个产品实体

var product = Context.Product
        .Include(p => p.VariantProduct)
        .FirstOrDefault(p => p.ProductID == 12345);

以便我的 VariantProduct 可用于进一步处理,但它始终为空。

我做错了什么还是这不可能?

提前致谢!

【问题讨论】:

  • 您的OtherProductVariant 实体中有什么?
  • VariantProduct 是父产品实体,VariantProducts 是您的子产品集合。检查您的数据库表以确认 .使用如下方式检查两者: var product = _context.Products .Include(p => p.VariantProducts).Include(p => p.VariantProduct) .FirstOrDefault(p => p.ProductID ==12345);

标签: c# .net-core ef-code-first asp.net-core-2.0 ef-core-2.0


【解决方案1】:

您的问题的解决方案:

    modelBuilder.Entity<Product>(entity =>
    {
        entity.HasOne(d => d.VariantProduct)
                .WithMany(p => p.VariantProducts)
                .HasForeignKey(d => d.OtherProductVariantID )
                .HasPrincipalKey(x=> x.ProductId);
    });

这段代码对我很有效!

【讨论】:

  • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
猜你喜欢
  • 2021-05-14
  • 2022-12-02
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 2022-12-27
  • 2023-01-11
  • 2017-04-26
  • 1970-01-01
相关资源
最近更新 更多