Linq数据映射:列属性上Storage属性的使用情况



有人能解释一下使用ColumnAttribute:的以下三种可能性之间的区别吗

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/sette,但在情况A或C中不使用,这是正确的吗?)

但我不明白A和C之间怎么会有任何区别。

C有助于让引擎理解表达式树,例如谓词:

var items = ctx.SomeTable.Where(x => x.ParentId == 21);

对于"a",我希望它会失败,因为它并不真正了解属性ParentId(只有字段m_parentid和数据库列)。在"c"中指定"存储"可以将db值直接保存到字段中,而不是使用该属性,从而避免了在从db实现时不需要的代码。

对于案例A,我同意Marc Gravell的观点。

在情况B中,这就像使用私有数据成员m_ParentId一样,可以通过公共属性ParentID访问。并且该属性使用表列parentId进行映射。

情况C将在db.getTable(<Class Name>)时产生错误。因为您同时使用名称和存储属性。

相关内容

  • 没有找到相关文章

最新更新