与同一类型实体的关系
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);
我有这个实体 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);