Dot-Net

使用 DataContext.ExecuteQuery<T> 時忽略只讀類屬性

  • January 17, 2013

在將結果集綁定到對象時,如何告訴 LINQ 數據上下文忽略特定屬性或所有隻讀屬性?

我正在處理一些使用 LINQ 難以表達的 T-SQL 語句,因此我使用數據上下文的 ExecuteQuery 方法將直接的 T-SQL 傳遞給數據庫。

如果我的類 T 具有任何只讀屬性,那麼當數據上下文嘗試設置這些屬性並且由於沒有 setter 屬性而失敗時,我會在執行時遇到異常。如何告訴上下文忽略這些屬性?

這就是我現在正在做的事情。它有效,但很糟糕:

public bool IsPaidInFull {
   get { return NetTotal &lt;= 0m; }
   set { /* needed so linq doesn't choke. Should never be set by hand */ }
}

您是否考慮過 Linq to Entity?轉換你的項目可能不值得麻煩,這取決於你走了多遠,或者你對多少 orm 成本感到滿意。但是,這種確切的情況在 Linq to Entities 中不會成為問題。它在載入對象時不會嘗試更新對像中的只讀屬性,因為它們沒有顯式映射,它們只是擴展屬性。

此外,您可以使用 getter 函式而不是屬性來走老派/java 路線。public bool getIsPaidInFull(){return NetTotal <= 0m;}。

或者您可以嘗試在繼承的子類中實現只讀屬性,但這可能會引入各種類型問題。

public bool IsPaidInFull
{
   get { return NetTotal &lt;= 0m; }
   private set { ;}
}

引用自:https://stackoverflow.com/questions/707706