Используя отражение, чтобы найти все таблицы linq2sql и убедиться, что они соответствуют базе данных - PullRequest
1 голос
/ 13 января 2011

Я пытаюсь использовать отражение, чтобы автоматически проверить, что все мои сущности linq2sql соответствуют тестовой базе данных.Я думал, что сделаю это, получив все классы, которые наследуются от DataContext из моей сборки:

var contexttypes = Assembly.GetAssembly(typeof (BaseRepository<,>)).GetTypes().Where(
       t => t.IsSubclassOf(typeof(DataContext)));
foreach (var contexttype in contexttypes)
{
    var context = Activator.CreateInstance(contexttype);
    var tableProperties = type.GetProperties().Where(t=> t.PropertyType.Name == typeof(ITable<>).Name);
    foreach (var propertyInfo in tableProperties)
        {
            var table = (propertyInfo.GetValue(context, null));
        }
}

Пока все хорошо, это циклически проходит через каждый ITable<> в каждом текстовом тексте проекта.Если я отлаживаю код, то «таблица» создается должным образом, и если я расширяю представление результатов в отладчике, я вижу фактические данные.

НО, я не могу понять, как заставить мой код на самом делезапросить эту таблицу.Я действительно хотел бы просто иметь возможность сделать table.FirstOrDefault (), чтобы получить верхнюю строку из каждой таблицы и убедиться, что выборка SQL не дает ошибок.Но я не могу привести эту таблицу к тому, что могу запросить.

Любые предложения о том, как я могу сделать этот вопрос?Мне было бы достаточно просто вызвать .Count (), чтобы убедиться, что у сущностей нет ничего, что не соответствует столбцам таблицы.

1 Ответ

1 голос
/ 13 января 2011

Получив табличный объект, вы можете преобразовать его в неуниверсальный интерфейс ITable, а затем использовать метод расширения OfType<object>(), чтобы получить IEnumerable<object>, который можно запросить:

object tableObject = GetTableFromReflection();
ITable table = (ITable)tableObject;
table.OfType<object>().FirstOrDefault();

РЕДАКТИРОВАТЬ: Только что видел это объявление на этой странице.Смотрите его второй пункт:

alt text

Теперь это то, что я называю таргетированной рекламой!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...