[英]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.