【问题标题】:Entity Framework 6 configure model using Fluent APIEntity Framework 6 使用 Fluent API 配置模型
【发布时间】:2014-12-21 14:20:40
【问题描述】:

我有分层模型(二叉树)。

class Partner
{
     public int ID {get; set; }

     public string Name { get; set; }

     // Parent in the tree.
     public virtual Partner BinarParent {get; set;}  

     // Who is invited partner in tree.
     public virtual Partner Sponsor {get; set;}     

     // Childs partners.
     public virtual List<Partner> Childs {get; set;} 
}

我现在有异常:

无法确定类型“Partner”和“Partner”之间关联的主体端。此关联的主体端必须使用关系流式 API 或数据注释显式配置。

如何使用 Fluent API 为该模型配置导航属性(赞助商和二进制父级)?

附:

  • 模型“Partner”存储在“Partners”表中。
  • 如果我删除了其中一个属性(Sponsor 或 BinaryPartner),则不会引发异常。

请帮帮我。

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    在您的上下文中执行此操作:

    public class YourContext : DbContext
    {
        //...
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
           // Configure the primary key for the Partner
           modelBuilder.Entity<Partner>().HasKey(t => t.ID);
    
           // Map one-to-many relationship
           modelBuilder.Entity<Partner>()
                .HasMany(p => p.Childs)
                .WithOptional(p => p.BinarParent);
    
    
            modelBuilder.Entity<Partner>()
                .HasOptional(t => t.Sponsor)
                .WithOptionalDependent()
                .Map(t => t.MapKey("FK_Sponsor_Id"))
    
        }
        //...
    }
    

    第一个关系将您的 BinarParent 属性与您的子集合映射。第二个关系映射属性 Sponsor。

    【讨论】:

    • 感谢您的回复。我想我解释得不好。一个“伙伴”可以有多个他邀请的“伙伴”。重要的!每个合作伙伴只需要一个“赞助商”和一个“BinarParent”。 “赞助商”和“BinarParent” - 也是“合作伙伴”。当然,我可以删除导航属性,而是声明 SponsorID 和 BinarParentID。但如果可能的话,我想使用导航属性配置所有相同的作业。 P.S“伙伴”是传销的结构。
    • 所以,我猜您在 Partner 类中声明了一个合作伙伴列表。你能确认一下吗?
    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 2019-05-12
    相关资源
    最近更新 更多