Entity Framework - объединение двух физических таблиц в одну «виртуальную» таблицу - PullRequest
2 голосов
/ 05 марта 2010

Я читал о портировании поставщика членства ASP.NET в .NET 3.5 с помощью LINQ & Entities.Однако модель БД, которую показывает каждый отдельный образец, является более новой моделью, в то время как я унаследовал довольно старую модель.Различия:

  • Пользователь Таблица разбита на пару Пользователь и членство Таблицы.
  • Для всех таблиц в БД добавляется aspnet_
  • У меня есть Пониженные версии некоторых столбцов (UserName, Email и т. Д.)

Чтобы работать с этим, я скопировал свойства из таблицы Membership в таблицу User (в БД это отношение 1 <-> 1, а не 1 <-> 0,1),переименован в aspnet_Applications для приложения, aspnet_Profiles в профиль, aspnet_Users для пользователя и aspnet_Roles для роли.(См. Изображение)

Изображение http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/c3cabe76-272d-4a33-b924-8d2c50e45e9c/EFMembership.png
Ссылка на полноразмерное изображение модели

Теперь у меня возникает одна из 2 проблем, когда я пытаюсьcompile.

  1. Используя модель в изображении, я получаю эту ошибку: Проблема в фрагменте сопоставления, начиная со строки 464: EntitySets 'UserSet' и 'aspnet_Membership' сопоставляются с таблицей 'aspnet_Membership',Их первичные ключи могут конфликтовать.
  2. Если я удаляю таблицу aspnet_Membership из моей модели (для обработки вышеуказанной ошибки), я получаю: Проблема в фрагменте сопоставления, начиная со строки 384: Столбец aspnet_Membership.ApplicationId в таблице aspnet_Membership должен отображаться: он не имеет значения по умолчанию и не может иметь значения NULL.

Моя способность вручную редактировать резервные хранилища не самая лучшая, и я не хочу простовзломать что-то в этом может сломать другие вещи.Я ищу предложения, лучшие практики и т.д., чтобы справиться с этим.

Примечание: Перемещение самих таблиц данных не вариант, так как я не могу заменить всю логику в существующих приложениях.Я строю этот провайдер EF для нового приложения.В течение следующих 6 месяцев старые приложения будут постепенно переходить на новые структуры.

Примечание: Я добавил ссылку под изображением к полноразмерному изображениюдля лучшего просмотра.

Ответы [ 2 ]

0 голосов
/ 18 марта 2010

Я справился с этим, используя EF4. EF4 имеет "FK Ассоциации". Это позволяет вам включить PK / FK (ApplicationId) в сущность и использовать сопоставление, которое вы отображаете через FK.

Для этого вам нужно добавить ApplicationId обратно к каждой сущности, которая зависит от него, и затем дважды щелкнуть на ассоциации, которую вы создаете между сущностями, и сопоставить два PK / FK друг с другом.

Теперь, если бы они могли только добавить поддержку enum ...: /

0 голосов
/ 06 марта 2010

Keith

Тнис с макушки головы ...

Я не очень хорошо вижу ваш скриншот. Но я думаю, что вашей первой попыткой было создать дубликаты свойств в двух объектах, которые указывают на одну и ту же таблицу. Не законно.

Похоже, ваша вторая попытка состояла в разделении сущностей. Но похоже, что вы удалили определение таблицы из схемы магазина.

Я бы порекомендовал вам вернуть это обратно и выполнить разбиение сущностей (одна сущность с подпорками из двух таблиц, что выполнимо, если таблица 1 и таблица 2 совместно используют ключ сущности).

Вам нужен указатель на walkthorugh для этого? Я должен был бы Google, чтобы найти один. Я уверен, что у меня где-то есть запись в блоге.

Julie

...