Используйте один и тот же тип для двух идентичных таблиц в EF Code First - PullRequest
1 голос
/ 01 февраля 2012

У меня есть две таблицы, Users и TempUsers, и мне нужно выполнить операции с ними обоими.У меня уже определен тип пользователей, и я хочу добавить его в DbContext для обеих таблиц.Проблема в том, что он либо использует соглашение для сопоставления имени типа с таблицей, либо использует атрибут TableAttribute с указанным именем таблицы.В любом случае я не вижу, как добавить два набора данных, отображающих тип в разные имена таблиц.

Я мог бы продублировать тип, используя copy + paste или класс UserBase и два производных класса User и TempUser.Оба способа будут работать, но на самом деле в коде, с которым я хочу иметь дело с пользователями, нет сложности «Пользователи» и «TempUsers» в коде.В конце концов, хранилище ответственно относится к тому, куда помещать пользовательские объекты, и бизнес-логика не должна иметь с этим дело.

Совет будет очень признателен.Спасибо!

[Объяснение на основе комментариев]

Причина, по которой у меня две таблицы, заключается в том, что TempUsers поддерживает массовый импорт / обновление, но хотя и атомарныйтранзакции на каждого пользователя.Таким образом, внешний экспорт некоторого активного каталога или что-то подобное приведет к вызову службы для каждого пользователя.Я должен создать / обновить пользователей и выяснить, какие из них не импортируются, но уже существуют в моей базе данных, а затем удалить их.Было бы намного проще обрезать таблицу Users и писать непосредственно в нее, но идентификаторы были бы другими, и это нарушило бы все ссылки, которые пользователи имеют на разные таблицы, например, историю доставки.

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

Это невозможно.EF не может отображать один и тот же класс дважды в одном и том же контексте.Ваш единственный класс User может быть сопоставлен только с таблицей Users или таблицей TempUsers в одном типе контекста.Вам нужны либо два пользовательских класса, либо два разных типа контекста (с разной конфигурацией отображения): один обеспечивает доступ к таблице Users, а второй - к таблице TempUsers.

0 голосов
/ 01 февраля 2012

Это напоминает мне мой собственный вопрос: Запрос данных с использованием Entity Framework из динамически создаваемой таблицы

На самом деле вы можете использовать EF и ExecuteStoreQuery для извлечения объектов, но вы не можете использовать функции LINQ EF.

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