Я новичок в Entity Framework и пытаюсь во всем разобраться. У меня создана не очень сложная база данных. Есть около 7 таблиц, и 3 из них являются таблицами сопоставления, чтобы связать одну запись таблицы с другой. Вот пример, который я использую:
Пользователь таблицы
- 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 = "[email protected]",
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 SERVER 2005 EXPRESS) или в сопоставлении? Это личный проект, поэтому при необходимости я могу опубликовать более подробную информацию о коде или xml. Любая помощь будет оценена по достоинству.