Dot-Net
使用 DataContext.ExecuteQuery<T> 時忽略只讀類屬性
在將結果集綁定到對象時,如何告訴 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 */ } }
您是否考慮過 Linq to Entity?轉換你的項目可能不值得麻煩,這取決於你走了多遠,或者你對多少 orm 成本感到滿意。但是,這種確切的情況在 Linq to Entities 中不會成為問題。它在載入對象時不會嘗試更新對像中的只讀屬性,因為它們沒有顯式映射,它們只是擴展屬性。
此外,您可以使用 getter 函式而不是屬性來走老派/java 路線。public bool getIsPaidInFull(){return NetTotal <= 0m;}。
或者您可以嘗試在繼承的子類中實現只讀屬性,但這可能會引入各種類型問題。
public bool IsPaidInFull { get { return NetTotal <= 0m; } private set { ;} }