У меня есть следующий dbContext:
class MyDbContext: DbContext
{
public DbSet<First> Firsts { get; set; }
public DbSet<Second> Seconds { get; set; }
public DbSet<FirstSecond> FirstSeconds { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<First>().HasMany(f => f.FirstSeconds).WithOne(fs => fs.First);
modelBuilder.Entity<First>().Property(prop => prop.RowVersion).IsRowVersion();
modelBuilder.Entity<Second>().HasMany(s => s.FirstSeconds).WithOne(fs => fs.Second);
modelBuilder.Entity<Second>().Property(prop => prop.RowVersion).IsRowVersion();
modelBuilder.Entity<FirstSecond>(e => e.HasKey(k => new
{
k.FirstId, k.SecondId
}));
modelBuilder.Entity<FirstSecond>().Property(prop => prop.RowVersion).IsRowVersion();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Server=localhost;Database=myDataBase;Trusted_Connection=True;");
base.OnConfiguring(optionsBuilder);
}
}
public class First
{
public Guid Id { get; set; }
public virtual Collection<FirstSecond> FirstSeconds { get; set; }
public byte[] RowVersion { get; set; }
}
public class Second
{
public Guid Id { get; set; }
public virtual Collection<FirstSecond> FirstSeconds { get; set; }
public byte[] RowVersion { get; set; }
}
public class FirstSecond
{
public Guid FirstId { get; set; }
public Guid SecondId { get; set; }
public virtual First First { get; set; }
public virtual Second Second { get; set; }
public byte[] RowVersion { get; set; }
}
}
У меня есть четыре экземпляра первого класса.И создавая экземпляр класса Second, а затем в том же dbContext, я обновляю этот экземпляр, заменяя третий экземпляр первого класса в созданном экземпляре Second:
using (var dbContext = new MyDbContext())
{
var firstInstances = dbContext.Firsts.ToList();
var secondInstanceToCreate = new Second()
{
Id = Guid.NewGuid(),
FirstSeconds = new Collection<FirstSecond>()
{
new FirstSecond()
{
FirstId = firstInstances[0].Id,
},
new FirstSecond()
{
FirstId = firstInstances[1].Id
},
new FirstSecond()
{
FirstId = firstInstances[2].Id,
},
}
};
dbContext.Seconds.Add(secondInstanceToCreate);
dbContext.SaveChanges();
obj = dbContext.Seconds.Include(s => s.FirstSeconds).ThenInclude(ss => ss.First)
.First(e => e.Id == secondInstanceToCreate.Id);
var newCollection = new Collection<FirstSecond>()
{
obj.FirstSeconds[0],
obj.FirstSeconds[1],
new FirstSecond()
{
FirstId = firstInstances[3].Id,
}
};
obj.FirstSeconds = newCollection;
dbContext.Update(obj);
dbContext.SaveChanges();
}
В этом случае во втором экземпляре класса я будуожидаемое поведение: до обновления во втором экземпляре у меня есть экземпляры первого 1,2,3.После обновления у меня будет 1,2,4.
second:{
firsts: [1,2,3]
}
//update operation performed
second:{
firsts:[1,2,4]
}
ВОПРОС ЕСТЬ: Почему, если я выполню операцию обновления в отдельном dbContext, у меня будут экземпляры First 1,23,4 вместо 1,2,4?
//after update operation
second:{
firsts: [1,2,3,4]
}