Используя Платформу Объекта, как я отражаю многих многим отношения и добавляю объекты, которые существуют к новому создаваемому объекту?

Я плохо знаком с Платформой Объекта и пытаюсь понять вещи. Мне создали базу данных, это не очень сложно. Существует приблизительно 7 таблиц, и 3 из тех являются таблицами отображения для соединения, одна таблица записывают w/другой. Пример, который я использую здесь, является этим:

  • Пользователь таблицы

    • UserId
    • Имя пользователя
  • Роль таблицы

    • RoleId
    • RoleName
  • Таблица: UserRole

    • UserId
    • RoleId

Внешние ключи отображаются в моей базе данных. Когда я создаю новую Модель Объекта в VS 2008, схема, кажется, имеет корректные отношения, но не составляет таблицу для таблицы UserRole. Отношения отображаются как Многие Многим между Пользователем и Ролью.

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

ObjectQuery<Role> roles = context.Roles;
Role role = context.Roles.Where(c => c.RoleName == "Subscriber").First();

 User user = new User
 { 
  DisplayName = "TestCreate2",
  Email = "test@test.com",
  Password = "test"
 };            
 context.AttachTo("Roles", role);
 user.Roles.Add(role);            
 context.AddToUsers(user);
 context.SaveChanges();

Вот ошибка, которую я получаю:

Не мог обновить EntitySet 'UserRoles', потому что это имеет DefiningQuery и никакой элемент, существует в элементе для поддержки текущей операции.

Вот xml, который принадлежит таблице UserRole:

<EntitySet Name="UserRoles" EntityType="RememberTheJourneyModel.Store.UserRoles" store:Type="Tables" store:Schema="dbo" store:Name="UserRoles">
        <DefiningQuery>SELECT 
  [UserRoles].[Role_id] AS [Role_id], 
  [UserRoles].[User_id] AS [User_id]
  FROM [dbo].[UserRoles] AS [UserRoles]</DefiningQuery>
      </EntitySet>

Это вытягивало зубы только, чтобы выяснить, как запросить контекст, таким образом, что это дало мне фактический Ролевой объект. Я уверен, что проблема - что-то, чтобы сделать с тем, как UserRole отображается, но я просто начинаю здесь и не имею никакой идеи, где это, возможно, пошло не так, как надо.

И я действительно искал Google и этот сайт, но я предполагаю, что не придумал правильные поисковые параметры для нахождения вопроса, который помогает мне зафиксировать это. Я нашел один вопрос, который сказал, что EF имеет проблемы с этим, но если Вы - таблица отображения, делает оба столбца первичным ключом, она разрешается. Я не уверен, как сделать это. Это сделано в базе данных (использующий ЭКСПРЕСС SQL-СЕРВЕРА 2005) или в отображении? Это - персональный проект, таким образом, я могу отправить больше деталей о коде или xml в случае необходимости. Любой и вся справка будут цениться.

6
задан Craig Stuntz 24 January 2010 в 16:28
поделиться

1 ответ

Я не помню, как и в этот вопрос ... и я полагаю, что я исправил это, сделав оба клавиши столбцов в таблице мою ассоциацию.

Вы можете сделать оба столба первичной клавиши в дизайнере пользователя Studio Server Server Server. Просто выделите оба user_id и rote_id одновременно, щелкните правой кнопкой мыши слева и выберите первичный ключ ... Это сделает его, чтобы никакая запись не может иметь такую ​​же комбинацию USER_ID и ROOL_ID. Сделать каждую запись уникальной.

Затем вы можете обновить свою модель данных в дизайнере Framework Entity .. И, надеюсь, будет хорошо идти.

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

5
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: