有人可以解释一下使用 ColumnAttribute
的以下 3 种可能性之间的区别吗:
A:字段上的属性
[Column(Name="ParentId")]
private int m_parentid;
public int ParentId { get { return m_parentid; } set { m_parentid = value; } }
B: 属性上的属性
private int m_parentid;
[Column(Name="ParentId")]
public int ParentId { get { return m_parentid; } set { m_parentid = value; } }
C: 具有存储集的属性的属性
private int m_parentid;
[Column(Name="ParentId", Storage="m_parentid")]
public int ParentId { get { return m_parentid; } set { m_parentid = value; } }
我可以理解,在非平凡的 getter/setter 的情况下,B 将不同于 A 和 C(Linq 可能会在 B 的情况下使用 getter/setter,但在 A 或 C 的情况下则不会,这是正确的吗?)
但我不明白 A 和 C 之间怎么会有任何区别。
最佳答案
C 有助于引擎理解表达式树,例如谓词:
var items = ctx.SomeTable.Where(x => x.ParentId == 21);
对于“a”,我希望它会失败,因为它并不真正了解属性 ParentId
(只有字段 m_parentid
和数据库列)。在“c”中指定“存储”允许将 db 值直接保存到字段而不是使用属性,从而避免在从 db 实现期间不需要的代码。
关于c# - Linq 数据映射 : usage of Storage property on column attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6235137/