【发布时间】:2015-04-23 07:48:05
【问题描述】:
这是困扰我的事情, 我有 2 个实体 --- 'Master' 和 'Slave',让我先列出它们:
public class Master
{
public Guid Id {get;set;}
public virtual ICollection<Slave> Slaves { get; set; }
public virtual Slave ParentSlave { get; set; }
}
class Slave
{
public Guid Id { get; set; }
public Guid ParentMasterId { get; set; }
public Master ParentMaster { get; set; }
public Guid? ChildMasterId { get; set; }
public Master ChildMaster { get; set; }
}
基本上,
- Master 拥有 Slave 列表;
- Slave 应该属于 Master(Parent);
- Slave 有另一个 Master(Child),然后可以拥有 Slave 列表;
对应的数据映射类来了,
class MasterDataMap : EntityTypeConfiguration<Master>
{
public MasterDataMap()
{
HasKey(i => i.Id);
HasOptional(o => o.ParentSlave).WithRequired(o=>o.ChildMaster);
ToTable("Master");
}
}
class SlaveDataMap : EntityTypeConfiguration<Slave>
{
public SlaveDataMap()
{
HasKey(i => i.Id);
HasRequired(o => o.ParentMaster).WithMany(m => m.Slaves).HasForeignKey(k=>k.ParentMasterId).WillCascadeOnDelete(true);
HasRequired(o => o.ChildMaster).WithOptional(d => d.ParentSlave);
ToTable("Slave");
}
}
这2个实体可以通过EF模型验证没有任何问题,并且在端到端测试中可以成功创建表,运行以下代码后,
for (var idx = x; idx <= xx; idx++)
{
topMaster.Slaves.Add(new Slave
{
Id = Guid.NewGuid(),
ChildMaster = new Master
{
Id = Guid.NewGuid(),
}
});
}
topMaster 和它的 slaves 都被插入到表中,childmaster(s) 也被插入了,但是它们没有与 topMaster 的 Slaves 关联,这意味着 'ChildMaster' 为 null 并且 'ChildMasterId' 为空 guid。
我不知道数据映射类有什么问题会导致这个问题。
【问题讨论】:
标签: entity-framework ef-fluent-api