与同一类型实体的关系

时间:2017-03-23 20:25:50

标签: c# entity-framework entity-framework-6 ef-fluent-api

我有这个实体类:

public class Account
{
    public int Id { get; set; }
    public int? OwnerAccoutId { get; set; }
    public string Code { get; set; }
    public string Description { get; set; }

    public virtual Account OwnerAccout { get; set; }
    public virtual ICollection<Account> ChildsAccouts{ get; set; }
}

一个帐户可以有0个或1个所有者和许多孩子。我不知道如何用流利的api构建关系。我尝试了许多方法但没有成功。

有人可以帮帮我吗?谢谢!

修改

地图

public AccoutMap()
{
    ToTable("Accounts");

    Property(c => c.Code).IsRequired().HasMaxLength(50);
    Property(c => c.Description).IsRequired().HasMaxLength(100);

    HasOptional(c => c.OwnerAccount).WithMany().HasForeignKey(c => c.OwnerAccoutId);
    HasOptional(c => c.ChildsAccout).WithMany().HasForeignKey(c => c.OwnerAccoutId);
}

我收到此错误:

  

InvalidCastException:无法转换类型为&#39; System.Data.Entity.DynamicProxies.Account_4946F7B05C862EE76E8535A251C267196936C8F963C26EBC2FABDAADDE4715B4&#39;输入&#39; System.Collections.Generic.ICollection`1 [Base.Entities.Account]

我理解,因为我将模型设置错误,实体框架将ChildsAccouts解释为Accout类型而不是ICollection。我刚开始使用CodeFirst。

编辑2:

我试过了:

HasOptional(c => c.OwnerAccount).WithMany(c => c.ChildsAccounts).HasForeignKey(c => c.OwnerAccoutId);

错误:

  

System.Data.Entity.Core.EntityCommandExecutionException:&#39;错误   执行命令定义时发生。看到内心   细节例外。&#39;

     

内部异常InvalidOperationException:打开的DataReader是   已经与此命令关联,您必须先关闭它。

编辑3

最后一个关系正常工作。修复错误添加&#34; MultipleActiveResultSets = True&#34;到我的连接字符串。

1 个答案:

答案 0 :(得分:0)

我使用这种关系并且工作正常:

HasOptional(c => c.OwnerAccount).WithMany(c => c.ChildsAccounts).HasForeignKey(c => c.OwnerAccoutId);