[英]Casting a derived class back to base class
我有一些使用LINQ-to-SQL類的簡單(C#,。NET 4.0)代碼,我正在嘗試“擴展”該對象以添加我自己的字段。 假設LINQ生成的類稱為DatabaseRow
,我想添加兩個bool
值供內部使用:
public class ExtendedDatabaseRow: DatabaseRow
{
public bool ReadyToWrite;
public bool Changed;
}
這在代碼中工作正常:我可以創建類型為ExtendedDatabaseRow
等的對象。但是,我想將這些對象寫回數據庫。 假設我想將對象changedRow
(類型為ExtendedDatabaseRow
)寫回數據庫:
DataClassesDataContext dc = new DataClassesDataContext();
DatabaseRow newrow = (DatabaseRow) changedRow; // "Cast" the extended object back to the base type
dc.DatabaseRows.InsertOnSubmit(newrow);
dc.SubmitChanges();
這會引發錯誤
你調用的對象是空的。
在嘗試InsertOnSubmit
。
我可以創建一個新的DatabaseRow
對象並從源對象中復制每個參數,但這對我來說似乎有點混亂。 我可以簡單地將擴展對象強制轉換回基礎對象,如果是這樣,我做錯了什么? 或者我正在做的很好,錯誤是更具LINQ特定的東西?
我對C#還是很陌生,尤其是所使用的術語,因此如果這是一個愚蠢的問題,請提前道歉。
您不需要派生新的類來擴展Linq To Sql實體,出於這個確切的原因,這些類被標記為partial
類,例如
public partial class DatabaseRow
{
public bool ReadyToWrite { get; set; }
public bool Changed { get; set; }
}
這是擴展設計人員生成的數據庫實體的推薦方法,這意味着您不必強制轉換。
IIRC,LINQ-to-SQL創建部分類,因此您可以通過這種方式擴展它; 這可能是擴展LINQ-to-SQL類的默認方式。
那就是說,我不明白為什么你會在那里得到Null參考。 您是否已逐步檢查代碼以檢查插入時newrow
是否為null?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.