我有兩個我想存儲在EF Code First中的類。一棟大樓有一名維護人員和一份在那裏工作的人員名單。 mainainer不必在大樓工作。兩個表格之間的多重關係
在我第一次嘗試我只是
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; }
}
這給了我與基本屬性兩個表,和Building_Id上的人,和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,因爲一個單一的實體。不能被識別爲異常的來源,通過在你的實體類型中公開外鍵屬性,可以更容易地處理異常,同時保存更加容易。
with innerexception: 「無法確定依賴操作的有效排序。由於外鍵約束,模型要求或存儲生成的值,可能存在依存關係。」
我不想在我的Poco's上公開任何更多的屬性,因爲他們是Poco的,我對這些屬性沒有用處。如果我必須滿足Code First模型生成的要求,那麼就不得不這樣做,但如果可能的話,我希望在映射課程中遠離我的Poco's。
我該如何解決這個問題?