使用DataContext.ExecuteQuery <T>时忽略只读类属性

Set*_*son 9 .net linq datacontext linq-to-sql

在将结果集绑定到对象时,如何告诉LINQ数据上下文忽略特定属性或所有只读属性?

我正在处理一些难以用LINQ表达的T-SQL语句,所以我使用数据上下文的ExecuteQuery方法将直接的T-SQL传递给数据库.

如果我的类T具有任何只读属性,那么当数据上下文尝试设置这些属性时,我会在运行时获得异常,因为没有setter属性.如何告诉上下文忽略这些属性?

这就是我现在正在做的事情.它有效,但很糟糕:

public bool IsPaidInFull {
    get { return NetTotal <= 0m; }
    set { /* needed so linq doesn't choke. Should never be set by hand */ }
}
Run Code Online (Sandbox Code Playgroud)

Tio*_*ion 0

您考虑过 Linq to Entities 吗?转换您的项目可能不值得,这取决于您的进度,或者您可以接受多少 Orm 开销。然而,这种情况在 Linq to Entities 中不会成为问题。它在加载对象时不会尝试更新对象中的只读属性,因为它们没有显式映射,它们只是扩展属性。

另外,您可以使用 getter 函数而不是属性来走老式/java 路线。public bool getIsPaidInFull(){return NetTotal <= 0m;}。

或者,您可以尝试在继承的子类中实现只读属性,但这可能会引入各种类型问题。