Из-за недавней проблемы, с которой я столкнулся несколько дней назад (вы можете проверить это сообщение здесь ), мне нужно было создать способ динамической ссылки на некоторые из моих таблиц linq to sql.Мне удалось сделать это с помощью абстрактного класса LogTable, который содержит все мои свойства LogTable, определенные в моем DataTable.Я смог сделать этот абстрактный способ, потому что мои LogTables имеют одинаковую структуру и, следовательно, одинаковые свойства.
Вот сокращенный код:
Абстрактный базовый класс
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 все свойства currentLOG заполнены, но свойства базового класса (LogTableStructure) пусты, как если бы базовый объект был нулевым.
Я забываю что-нибудь о наследовании скрытия члена или что-то подобное?Я даже добавил модификатор new
ко всем моим свойствам LogTable в моем .dbml, но даже это не решило проблему