簡體   English   中英

如何從Linq-To-Sql映射中排除成員?

[英]How do I exclude a member from Linq-To-Sql mapping?

我有這門課:

public class MyClass {
    [Column(Name="StoredColumn", DbType="int")]
    public int Stored;

    public int ForDisplay {
       get { return Stored * 1000; }
    }
}

關鍵是ForDisplay不存儲在數據庫中 - 我只是需要它來獲得更方便的代碼。

我嘗試運行一個返回行集的SQL查詢並獲取此InvalidOperationException

無法為成員'ForDisplay'指定值。 它沒有定義一個setter。

我不希望Linq-To-Sql觸及ForDisplay 怎么告訴Ling-To-Sql不接觸它?

你不需要告訴Linq它不應該觸及“ForDisplay”屬性。 通常,未使用Column屬性專門標記的所有屬性都將被視為應用程序邏輯的臨時部分,並且不會保留或從數據庫中檢索。

但是,如果要通過存儲過程(例如GetMyClasses從數據庫中檢索某些記錄,則設計器將創建一個新類GetMyClassesResult 如果查看生成的代碼,則會注意到該類未使用Table屬性進行修飾。 在這種情況下,映射器假定必須分配每個屬性。 如果查詢中存在沒有相應值的屬性,則映射器將嘗試將該屬性設置為default(T),但由於沒有setter,因此將拋出異常。

無論如何,簡而言之,只需添加

[Table]
public class MyClass
{
  ...
}

你的班級應該解決這個問題。

您可以使用部分類擴展linq2sql。 關鍵元素不是修改原始類,而是創建一個額外的分部類:

 public partial class MyClass
 {
    public int ForDisplay {   
       get
       {
           return this._Stored * 1000; 
       }   
    }   
  }

我的問題是來自表值函數的返回值,其中模型沒有裝飾

[Table]

在課堂上。 我可以確認在我的額外的部分課程中添加[表格]是一種享受

[Table]
public partial class MyClassFromTVF
{
        public int ForDisplay {
             get { return Stored * 1000; }
        }
}

嘗試將列聲明為計算列,如下所示:

public class MyClass 
{ 
    [Column(Name="StoredColumn", DbType="int")]     
    public int Stored;      

    [Column(Name="ForDisplay", Expression="StoredColumn * 1000")]
    public int ForDisplay 
    {        
        get { return Stored * 1000; }     
    } 
} 

這應該工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM