Я плохо знаком с Платформой Объекта и пытаюсь понять вещи. Мне создали базу данных, это не очень сложно. Существует приблизительно 7 таблиц, и 3 из тех являются таблицами отображения для соединения, одна таблица записывают w/другой. Пример, который я использую здесь, является этим:
Пользователь таблицы
Роль таблицы
Таблица: UserRole
Внешние ключи отображаются в моей базе данных. Когда я создаю новую Модель Объекта в 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 в случае необходимости. Любой и вся справка будут цениться.
Я не помню, как и в этот вопрос ... и я полагаю, что я исправил это, сделав оба клавиши столбцов в таблице мою ассоциацию.
Вы можете сделать оба столба первичной клавиши в дизайнере пользователя Studio Server Server Server. Просто выделите оба user_id и rote_id одновременно, щелкните правой кнопкой мыши слева и выберите первичный ключ ... Это сделает его, чтобы никакая запись не может иметь такую же комбинацию USER_ID и ROOL_ID. Сделать каждую запись уникальной.
Затем вы можете обновить свою модель данных в дизайнере Framework Entity .. И, надеюсь, будет хорошо идти.
Я считаю, что если таблица не имеет никаких ключей, определенных для обеспечения уникальных записей, то EF не сможет правильно обновлять записи, и поэтому рамочные охранники против этого случая.