我有一个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,我想这就是你想要什么)。 –