c# - Linq 数据映射 : usage of Storage property on column attribute

标签 c# linq mapping

有人可以解释一下使用 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 之间怎么会有任何区别。

最佳答案

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

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

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

关于c# - Linq 数据映射 : usage of Storage property on column attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6235137/

相关文章:

c# - 如何在azure web应用程序上部署信号R自托管服务器

arrays - Swift - 在一个大的时间范围内按一年中的一周对一系列项目进行分组

c# - RestSharp 响应不包含任何内容

c# - 从代码隐藏调用 javascript 与从 javascript 调用代码隐藏

c# - 使用 linq 的 WPF 组合框绑定(bind)

c# - 使用 LINQ 扩展对 foreach 类型约束

c# - 从 Action<T> 的实例中获取 Invoke MethodInfo 的最安全方法

php - 如何将(大)整数映射到(小尺寸(带有 PHP 的字母数字字符串?(Cantor?)

arrays - Solidity 被调用的函数应该是付费的,但它是 View 函数

c# - WPF Datagrid 单击行打开新页面