我試圖在實體之間做一個可選的關係,但是我很難找到正確的語法。其實我需要一個0..1到0..2的關係,但我猜測,一旦我找到方法來做0..1到0..1這將是微不足道的。EF代碼第一個0..1到0..1的關係
簡化我有什麼是這樣的:
class Foo
{
int Id { get; set; }
//navigation property
virtual Bar Bar { get; private set; }
}
class Bar
{
int Id { get; set; }
int? LeftFooId { get; set; }
[ForeignKey("LeftFooId")]
Foo LeftFoo { get; set; }
int? RightFooId{ get; set; }
[ForeignKey("RightFooId")]
Foo RightFoo { get; set; }
}
一個富可連接到零或一個酒吧,絕不會。酒吧可以有一個LeftFoo和一個RightFoo,或者一個或兩個都沒有。如果Foo的Bar屬性沒有被Bar引用,它的Bar屬性應該爲null,並且它應該包含Bar引用它的Bar。
使用上面的代碼,Bar正確引用了Foo,但EF給Foo表一個Bar_Id,並且Bar屬性始終爲空。
我已經嘗試了幾種不同的方法來設置這些實體類,並且我使用了differenct Fluent API調用來完成這項工作,但是我沒有得到想要的結果。
這給了我已經有的東西。 FK在那裏,但是當我分配LeftFoo和RightFoo時,那些Foo的Bar_Id保持爲空。我試圖通過添加到OptionalDependent(f => f.Bar)來補救此問題,但是這給了我錯誤:指定的Schema無效。錯誤: (85,6):錯誤0040:類型Bar_LeftFoo未在名稱空間(Alias = Self)中定義。 – Wuolennaj
你確定你沒有做別的事嗎?正如我在本地測試它,它工作。你如何指定'left'和'right'來禁止?你可以發佈嗎? – SOfanatic
我目前在我的種子中做的是製作一堆酒吧的所有fk的null然後保存更改,然後我遍歷所有酒吧,併爲每個空的leftfoo或rightfoo創建一個新的foo,留下Bar屬性爲空,然後我做另一個保存。然後我將新的foo分配給bar(bar.leftfoo = foo)。然後進行更新和保存。 – Wuolennaj