我有一個Point
類:實體框架6與不可變類
// My immutable Point class
public class Point
{
private readonly Distance _x;
private readonly Distance _y;
private readonly Distance _z;
public Distance X
{
get { return _x; }
}
public Distance Y
{
get { return _x; }
}
public Distance Z
{
get { return _x; }
}
// Ok, so this isn't immutable... but it's purely for EF
public int DatabaseId { get; set; }
public Point(Distance x, Distance y, Distance z)
{
_x = x;
_y = y;
_z = z;
}
}
(Distance
是存儲單元和值自定義類。)
這是偉大的。我們愛不變。但是Entity Framework不會認識到我需要將X,Y和Z放入數據庫中,因爲它們沒有setter。而他們不應該,因爲這是一個不可改變的階級。甚至不應該有一個private set
。
我有這樣的代碼建立我的模型:
modelBuilder.Entity<Point>()
.HasKey(point => point.DatabaseId);
有什麼辦法來保存這個類的真正的永恆,但也讓這個EF6便可訪問和存儲這些值?提前致謝。
這可能有點挑剔,但不應該是一個結構?你不應該將EF映射到一個可變類,然後用它來創建你的結構對象嗎?看起來你正在試圖將一個方形的釘子插入一個圓孔。 –
不存在不可變的數據庫行。如果你需要一個不可變的對象,你可能需要一個從數據實體層到你的不可變類型所在層的映射層。 – xxbbcc
只適用於私人二傳手。但是還有更多的擔憂。數據模型應該是什麼樣子?你可以有一個'Point'表,有三個FK到'Distance',但是你如何確保三個'Distance'總是被一個'Point'引用(而不是任何其他'Point's,我想這就是你想要什麼)。 –