我有这个实体类:
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;到我的连接字符串。
答案 0 :(得分:0)
我使用这种关系并且工作正常:
HasOptional(c => c.OwnerAccount).WithMany(c => c.ChildsAccounts).HasForeignKey(c => c.OwnerAccoutId);