none
Entity Framework, связь “многие ко многим” - добавление данных в таблицу связывания, RRS feed

  • Вопрос

  • При помощи Entity Fremework Code First сгенерированы таблицы AspNetUsers (стандартная таблица ASP.NET Identity) и GaveBooks со связью многие ко многим:

    EF автоматически сгенерировал таблицу связи GaveBookApplicationUsers. Задача - записать в таблицу выданных книг GaveBookApplicationUsers пользователя, которому она выдана. Просто добавить книгу в таблицу GaveBook получается, а вот указать в таблице GaveBookApplicationUsers какая книга кому отдана не получилось. Вот мой код:

    using (var db = new ApplicationContext()) { var user = UserManager.FindByEmail(givenBook.Email); GaveBook gaveBook = new GaveBook { ReturnDate = givenBook.DateReturn, BookId = givenBook.BookId, }; user.GaveBooks.Add(gaveBook); db.GaveBooks.Add(gaveBook);

    db.SaveChanges(); }

    UserManager - объект ApplicationUserManager`, который возвращает всех пользователей. Вот так выглядит класс ApplicationUser:

    public class ApplicationUser : IdentityUser
        {
            public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
            {
                var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
                return userIdentity;
            }
            public virtual ICollection<GaveBook> GaveBooks { get; set; }
    
            public virtual ICollection<BookingBook> BookingBooks { get; set; }
    
        }

    И GaveBook:

     public class GaveBook
        {
            public int Id { get; set; }
    
            public DateTime ReturnDate { get; set; }
    
            public virtual ICollection<ApplicationUser> ApplicationUsers { get; set; }
    
            public int BookId { get; set; }
            public virtual Book Book { get; set; } 
        }


    • Изменено Gargulie 27 июня 2015 г. 16:40
    27 июня 2015 г. 9:32

Ответы

  • Как оказалось, при работе с таблицами производными от ASP.NET Identity для обновления данных необходимо пользоваться специальным методом Update, который нужно вызывать на классе менеджера пользователей. Следующий код добавляет запись и в GaveBooks, и в GaveBookApplicationUsers, что и требовалось сделать.

    user.GaveBooks = new List<GaveBook>() { gaveBook };
    UserManager.Update(user);

    • Помечено в качестве ответа Gargulie 29 июня 2015 г. 22:06
    29 июня 2015 г. 10:56

Все ответы

  • Добрый день.

    У вашего пользователя есть свойство BookingBooks типа коллекция. Выбираете книгу и добавляете ее в эту коллекцию. Все должно нормально сохраниться.

    29 июня 2015 г. 10:47
    Отвечающий
  • Как оказалось, при работе с таблицами производными от ASP.NET Identity для обновления данных необходимо пользоваться специальным методом Update, который нужно вызывать на классе менеджера пользователей. Следующий код добавляет запись и в GaveBooks, и в GaveBookApplicationUsers, что и требовалось сделать.

    user.GaveBooks = new List<GaveBook>() { gaveBook };
    UserManager.Update(user);

    • Помечено в качестве ответа Gargulie 29 июня 2015 г. 22:06
    29 июня 2015 г. 10:56