Я использую 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 вместо того, чтобы выбирать его и обновлять свойства один -на -один.
Когда я инициализирую базу данных, я добавляю некоторые тестовые данные.:
Когда я перечисляю видео из кода, я вижу, что коллекция Video.Coworkers заполнена правильными значениями, и когда я запрашиваю таблицу ссылок (VideoCoworkers )в SQL Server Management Studio, она также выглядит хорошо.
Моя проблема когда я обновляю, например, название видео, оно работает. Но когда я пытаюсь удалить из Video2 существующих сотрудников (B и C )и пытаюсь добавить сотрудника A, отношения не обновляются. Это также не работает, когда я пытаюсь добавить нового коллегу или только пытаюсь удалить его. Я создаю объект, который используется в качестве параметра метода Update (), создавая новый объект Video с новой коллекцией Coworkers (, которые выбираются из базы данных с помощью метода Find ()по Id ).
Каков правильный способ обновления многих -до -многих отношений?