Не удается обновить многие связи с -по -в Entity Framework

Я использую Entity Framework 4.3 Code First, и у меня есть проблема с обновлением многих -до -многих отношений.

Я определил следующие классы:

public abstract class Entity
{
    [Column(Order = 0)]
    [Key]
    public int Id { get; set; }

    [Timestamp]
    [Column(Order = 1)]
    public byte[] Version { get; set; }
}


public class Video : Entity
{
    public string Title { get; set; }
    public string Description { get; set; }
    public TimeSpan Length { get; set; }

    public virtual ICollection<Coworker> Coworkers { get; set; }
}


public class Coworker : Entity
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual ICollection<Video> Videos { get; set; }
}

Когда база данных создана, схема выглядит правильно :Также есть таблица Videos, Coworkers и VideoCoworkers, без

Я использую шаблон репозитория в приложении уровня N -для доступа к базе данных, мой метод Insert and Update выглядит следующим образом:

public T Insert(T entity)
{
    //Creates database context. When it disposes, it calls context.SaveChanges()
    using (var session = new DatabaseSession())
    {
        session.Context.Set<T>().Add(entity);
    }
}

public T Update(T entity)
{
    //Creates database context. When it disposes, it calls context.SaveChanges()
    using (var session = new DatabaseSession())
    {
        entity = session.Context.Set<T>().Attach(entity);
        session.Context.Entry(entity).State = EntityState.Modified;
    }
    return entity;
}

Когда я обновляю объект, я создаю объект сущности из DTO, поэтому используйте DbSet.Attach вместо того, чтобы выбирать его и обновлять свойства один -на -один.

Когда я инициализирую базу данных, я добавляю некоторые тестовые данные.:

  1. Создаю 3 сотрудника, где я устанавливаю имя и фамилию. (A, B, C)
  2. Создайте 3 видео, где я задаю название, описание и продолжительность, а также задаю некоторых сотрудников. В первом видео есть A, B, во втором — B, C, а в третьем — A, C.

Когда я перечисляю видео из кода, я вижу, что коллекция Video.Coworkers заполнена правильными значениями, и когда я запрашиваю таблицу ссылок (VideoCoworkers )в SQL Server Management Studio, она также выглядит хорошо.

Моя проблема когда я обновляю, например, название видео, оно работает. Но когда я пытаюсь удалить из Video2 существующих сотрудников (B и C )и пытаюсь добавить сотрудника A, отношения не обновляются. Это также не работает, когда я пытаюсь добавить нового коллегу или только пытаюсь удалить его. Я создаю объект, который используется в качестве параметра метода Update (), создавая новый объект Video с новой коллекцией Coworkers (, которые выбираются из базы данных с помощью метода Find ()по Id ).

Каков правильный способ обновления многих -до -многих отношений?

6
задан mrtx 1 May 2012 в 18:25
поделиться