我有两个类要存储在 EF Code First 中。建筑物有一个维护者,以及在那里工作的人员列表。维护人员不必在大楼内工作。
在我第一次尝试时,我刚刚
public class Person
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
}
和
public class Building
{
public virtual Guid Id { get; set; }
public virtual List<Person> WorksHere { get; set; }
public virtual Person MaintainedBy { get; set; }
public virtual String Address { get; set; }
}
这给了我两个带有基本属性的表,以及关于 People 的 Building_Id 和关于 Buildings 的 MaintainedBy_Id。
当我运行测试程序时
using (TestContext tc = new TestContext())
{
Person m1 = tc.persons.Create();
m1.Name = "maintainB1";
m1.Id = Guid.NewGuid();
Person m2 = tc.persons.Create();
m2.Name = "maintainB2";
m2.Id = Guid.NewGuid();
Building b1 = tc.buildings.Create();
b1.Address = "building1";
b1.Id = Guid.NewGuid();
tc.buildings.Add(b1);
Building b2 = tc.buildings.Create();
b2.Address = "building1";
b2.Id = Guid.NewGuid();
tc.buildings.Add(b2);
b1.MaintainedBy = m1;
b2.MaintainedBy = m2;
if (b1.WorksHere == null) b1.WorksHere = new List<Person>();
if (b2.WorksHere == null) b2.WorksHere = new List<Person>();
b1.WorksHere.AddRange(new List<String>() { "e11", "e12", "e13" }.Select(s =>
{
Person p = new Person();
p.Id = Guid.NewGuid();
p.Name = s;
return p;
}));
b2.WorksHere.AddRange(new List<String>() { "e21", "e22", "e23" }.Select(s =>
{
Person p = new Person();
p.Id = Guid.NewGuid();
p.Name = s;
return p;
}));
b1.WorksHere.Add(m2);
b2.WorksHere.Add(m1);
tc.SaveChanges();
}
}
我收到一个异常:“保存不为其关系公开外键属性的实体时发生错误。EntityEntries 属性将返回 null,因为无法将单个实体标识为异常源。保存时处理异常可以是通过在实体类型中公开外键属性变得更容易。有关详细信息,请参阅 InnerException。
带有内部异常:“无法确定依赖操作的有效排序。由于外键约束、模型要求或存储生成的值,可能存在依赖关系。”
我不想在我的 Poco 上公开更多属性,因为它们是 Poco 的,我对这些属性没有用处。如果我必须满足 Code First 模型生成,那就必须这样做,但如果可能的话,我希望在映射类中远离我的 Poco。
我该如何解决?