C# Linq数据映射:列属性上存储属性的使用
有人能解释一下使用C# Linq数据映射:列属性上存储属性的使用,c#,linq,mapping,C#,Linq,Mapping,有人能解释一下使用列属性的以下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 {
列属性的以下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的具体化过程中不必要的代码。对于案例A,我同意Marc Gravell的观点
在案例B中,它就像使用私有数据成员m_ParentId
一样,可以通过公共属性ParentId访问。属性与表列parentId映射
案例C将在执行db.getTable()
时产生错误。因为您正在同时使用名称和存储属性