有人可以解释使用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之间有什么区别。
答案 0 :(得分:3)
C对于允许引擎理解表达式树很有用,例如谓词:
var items = ctx.SomeTable.Where(x => x.ParentId == 21);
对于“a”,我希望这会失败,因为它并不真正了解属性ParentId
(只有字段m_parentid
和数据库列)。在“c”中指定“存储”允许将db值直接保存到字段而不是使用属性,从而避免在数据库实现期间不需要的代码。
答案 1 :(得分:0)
对于案例A,我同意Marc Gravell的观点。
在案例B中,就像使用私有数据成员m_ParentId
可通过公共属性ParentID访问一样。并且该属性使用表列parentId进行映射。
案例C会在db.getTable(<Class Name>)
时产生错误。因为您一起使用名称和存储属性。