C# 如何在实体框架5中用无状态对象更新多个关系实体

C# 如何在实体框架5中用无状态对象更新多个关系实体,c#,entity-framework,dependency-injection,entity-framework-5,C#,Entity Framework,Dependency Injection,Entity Framework 5,我用以下实体创建了代码优先模型 public abstract class Model { public Guid Id { get; set; } } public class Media : Model { public string Name { get; set; } public IList<Tag> Tags { get; set; } } public class Tag : Model { public string Name { get; se

我用以下实体创建了代码优先模型

public abstract class Model
{
  public Guid Id { get; set; }
}

public class Media : Model
{
  public string Name { get; set; }
  public IList<Tag> Tags { get; set; }
}

public class Tag : Model 
{
  public string Name { get; set; }
  public IList<Media> Media { get; set; }
}
背景:

public DbSet<Media> Media { get; set; }
public DbSet<Tag> Tags { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  modelBuilder.Entity<Tag>().HasMany(x => x.Media).WithMany(x => x.Tags).Map(x =>
    {
       x.ToTable("Tags_X_Media");
       x.MapLeftKey("TagId");
       x.MapRightKey("MediaId");
    });
   ....
 }
具有接口的数据存储库:

public interface IDataRepository
{
  T Update<T>(T model) where T : Model;
}

public class DataRepository : IDataRepository
{
  public T Update<T>(T model) where T : Model
  {
    return PerformAction((context) =>
    {
      context.Set<T>().Attach(model);
      context.Entry(model).State = System.Data.EntityState.Modified;
      context.SaveChanges();
      return model;
    }
  }

    private T PerformAction<T>(Func<Context, T> toPerform) where T : Model
    {
        using (Context context = new Context())
        {
            context.Configuration.AutoDetectChangesEnabled = false;
            context.Configuration.ValidateOnSaveEnabled = true;
            context.Configuration.LazyLoadingEnabled = false;
            context.Configuration.ProxyCreationEnabled = false;
            return toPerform(context);
        }
    }
}
保存示例:

//get uses .Include(x => x.Tags)
var media = DbRepository.Get<Media>(p => p.Id == "the id", x => x.Tags);

media.Tags.Add(new Tag { Name = "A tag name" });
DbRepository.Update<Media>(media);
在上面的保存示例中,在交叉表标记\u X\u介质中添加和删除实体的正确方法是什么?如果我将state设置为changed,例如Media.Tags,则该状态将应用于dbo.Tags中的Tags实体,并且我无法在表中添加新行。在代码中是否可以避免将Tags_X_媒体作为模型来实现此功能,或者这是添加或删除此实体的唯一方法