2011-06-04 68 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>)時產生錯誤。因爲您一起使用名稱和存儲屬性。