与同一类型实体的关系

Relation to the same type of entity

我有这个实体 class:

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 个所有者和许多孩子。我不知道如何构建与fluent-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: Can not convert an object of type 'System.Data.Entity.DynamicProxies.Account_4946F7B05C862EE76E8535A251C267196936C8F963C26EBC2FABDAADDE4715B4' to type 'System.Collections.Generic.ICollection`1 [Base.Entities.Account]

我知道因为我设置的模型有误,entity framework 将 ChildsAccouts 解释为 Accout 类型而不是 ICollection 。我刚开始使用 CodeFirst。

编辑 2:

我试过了:

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

错误:

System.Data.Entity.Core.EntityCommandExecutionException: 'An error occurred while executing the command definition. See the inner exception for details.'

Inner Exception InvalidOperationException: An open DataReader is already associated with this Command, you must close it first.

编辑 3

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

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

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