由於我前幾天(可以檢查這個帖子here)最近的一個問題,我需要創建一種方式,我的一些LINQ到SQL表可以被動態引用。我設法通過一個抽象的LogTable類來實現,它包含我的DataTable中定義的所有LogTable屬性。我能夠做到這一抽象的方式,因爲我的LogTable具有相同的結構,因此具有相同的屬性。C#子類丟失屬性值
繼承人的還原後的代碼:
抽象基類
public abstract class LogTableStructure
{
public int ID { get; set; }
public datetime? LastAccess { get; set; }
public string Username { get; set; }
}
我(還原後)的動態更新LogTable方法:
public void UpdateLog<T>(T currentLOG) where T : LogTableStructure
{
LogTableStructure logStructure = null;
//LogTableEnum is defined on this class constructor
switch (LogTableEnum)
{
case LogTableEnum.Log2009:
logStructure = this.factory.LogDB.LOG_2009s
.SingleOrDefault(q => q.ID == currentLOG.ID);
break;
case LogTableEnum.Log2010:
logStructure = this.factory.LogDB.LOG_2010s
.SingleOrDefault(q => q.ID == currentLOG.ID);
break;
case LogTableEnum.Log2011:
logStructure = this.factory.LogDB.LOG_2011s
.SingleOrDefault(q => q.ID == currentLOG.ID);
break;
}
}
問題
由於某些原因,currentLOG參數會引發運行時空引用異常,即使它具有填充的所有LogTable屬性。我注意到,通過使用vs2010 debbuger,當currentLOG屬性被填充時,基類(LogTableStructure)屬性都是空的,就好像基類對象爲null。
我是否僞造了關於成員隱藏繼承或類似的東西?我甚至在我的.dbml的所有LogTable屬性中添加了new
修飾符,但即使這樣也沒有解決問題
你可以舉一個你調用'UpdateLog'方法的代碼的例子嗎?另外,你在哪裏定義你注入的'ocorrenciaBanco'對象? –
什麼是'ocorrenciaBanco'?你爲什麼要聲明一個你不理會的logStructure變量? 「currentLOG參數拋出[...]」是什麼意思? (參數本身不能拋出異常 - 只能訪問。) –
您是否知道上一個case語句中的拼寫錯誤?應該是Log2011,我猜... – VVS