POCO, Entity Insert Error в отношении многие ко многим

У меня небольшая проблема. Когда я добавлю новый элемент в свою базу данных (EF), у меня возникнет сообщение UpdateEception: Невозможно обновить EntitySet 'UserRoles', потому что у него есть DefiningQuery, и в элементе не существует элемента для поддержки текущей операции.

У меня очень маленький стол.

Users : 

- [PK] UserID
- Login
- Password
- Email
- IsActive

Roles :
- [PK] RoleID
- Name

UserRoles :
- [FK] UserID
- [FK] RoleID

Получить метод

User u = db.Users.Single(x => x.Login == "scott");

работает нормально, но не вставляет :/ Я пробовал много способов. Пробую добавить PK в UserRoles, работает, но не то, что будет. Отношения будут многие -> один -> многие, не многие ко многим, и у меня должен быть один дополнительный класс. Я не знаю, как это исправить.

Мой Entity Class слишком прост. Список в классе ролей и Список в классе пользователей являются виртуальными.

public class TestDBEntity : ObjectContext
{
    public ObjectSet<Role> Roles { get; set; }
    public ObjectSet<User> Users { get; set; }

    public TestDBEntity()
        : base("name=TestDBEntities", "TestDBEntities")
    {
        ContextOptions.LazyLoadingEnabled = true;

        this.Roles = CreateObjectSet<Role>();
        this.Users = CreateObjectSet<User>();
    }
}

person user634199    schedule 17.03.2011    source источник
comment
Можете ли вы опубликовать свой код? И, возможно, EDM тоже - это могло бы помочь увидеть проблему.   -  person Yakimych    schedule 17.03.2011


Ответы (1)


Вы должны создать составной ключ (UserID, RoleID) в таблице UserRoles. Другого пути нет, потому что без определенного первичного ключа таблица отображается как представление только для чтения. Он по-прежнему будет моделировать отношения «многие ко многим», но вам, вероятно, придется сначала удалить свои объекты из модели и снова добавить их путем обновления из базы данных.

person Ladislav Mrnka    schedule 18.03.2011