2011-06-04 69 views
4

有人可以请解释以下的3种可能性之间的差使用ColumnAttributeLINQ的数据映射:在列属性存储属性的使用

答:字段

[Column(Name="ParentId")] 
private int m_parentid; 
public int ParentId { get { return m_parentid; } set { m_parentid = value; } } 

乙属性:上属性属性

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.

之间的任何差别

回答

3

C是有用的,以使发动机能够理解表达式树,例如断言:

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

用“a”我会期望这会失败,因为它并不真正知道w关于属性ParentId(只有字段m_parentid和数据库列)。在“c”中指定“存储”允许将db-value直接保存到该字段而不是使用该属性,从而避免在从数据库实例化时不需要的代码。

0

对于情况A,我同意Marc Gravell。

在情况B中,它就像使用私人数据成员m_ParentId可通过公共属性ParentID进行访问。该属性映射到表列parentId。

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