Sco*_*y H 5 c# entity-framework immutability entity-framework-6
我有一Point节课:
// 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;
}
}
Run Code Online (Sandbox Code Playgroud)
(Distance是一个存储单位和值的自定义类.)
那很棒.我们喜欢不变性.但实体框架不会认识到我需要将X,Y和Z放在数据库中,因为它们没有setter.他们不应该,因为这是一个不可改变的阶级.甚至不应该有private set.
我有这个代码构建我的模型:
modelBuilder.Entity<Point>()
.HasKey(point => point.DatabaseId);
Run Code Online (Sandbox Code Playgroud)
有没有办法保持这个类的真正不变性,但也可以使EF6可以访问和存储这些值?
据我所知,EF 会将 和 存储_x在X表中,因此您必须使用私有设置器将它们公开。
除了 EF 必须能够设置的主键之外,它们仍然是不可变的。
或者,您可以添加另一层:不可变类和 EF 表模型类,当您从数据库中提取数据时,您将获得一个不可变对象,而可变对象将隐藏在 DAL 之外。
| 归档时间: |
|
| 查看次数: |
1449 次 |
| 最近记录: |