Обычно Dbcontext
, представляющий вашу базу данных, имеет несколько свойств DbSet<TEntity>
, где каждый DbSet
представляет таблицу в вашей базе данных.
Все не виртуальные свойства TEntity
представляют столбцы в вашей таблице; виртуальные свойства TEntity
представляют отношения между таблицами: один ко многим, многие ко многим и т. д.
Каждый DbSet<TEntity>
реализует IDbSet<TEntity>
, поэтому, где бы ваш старый DbContext
не использовал IDbSet
, вы можете вместо него присвоить ему DbSet
.
Если я правильно вас понял, у вашего старого DbContext
были некоторые свойства, которые реализовали IDbSet<...>
, и метод SomeRandomMethod
использовал эти свойства.
class MyOldDbContext : DbContext
{
public IDbSet<Aentity> Aentities {get; set;}
public IDbSet<Bentity> BEntities {get; set;}
public void SomeRandomMethod()
{ // this method uses the IdBsets AEntities and BEntities:
IDbSet<AEntity> x = this.AEntities;
IDbSet<BEntity> y = this.BEntities;
... // do something with x and y
}
}
Теперь ваш новый DbContext. Если DbSets имеют те же типы сущностей, что и старые, проблем нет:
class MyNewDbContext : DbContext
{
public DbSet<Aentity> Aentities {get; set;}
public DbSet<Bentity> BEntities {get; set;}
public void SomeRandomMethod()
{ // this method uses the DbSets AEntities and BEntities, which implement IDbSet
IDbSet<AEntity> x = this.AEntities;
IDbSet<BEntity> y = this.BEntities;
... // do something with x and y
}
}
Обратите внимание, что AEntities / BEntities теперь DbSet<...>
вместо IDbSet<...>
. Поскольку каждый DbSet<...>
реализует IDbSet<...>
, ваша проблема решена.
Это немного сложнее, если ваши новые таблицы отличаются от ваших старых. В этом случае вам нужно написать свойства адаптера, которые возвращают ожидаемое IDbSet<...>
class MyNewDbContext : DbContext
{
public DbSet<Teacher> Teachers {get; set;}
public DbSet<Student> Students {get; set;}
public void SomeRandomMethod()
{ // this method uses the IdBset of AEntities and BEntities:
IDbSet<AEntity> x = this.AEntities;
IDbSet<BEntity> y = this.BEntities;
... // do something with x and y
}
// for SomeRandomMethod we need properties AEntities and BEntities
// use your new DbSets to mimic the old AEntities and BEntities
private IDbSet<AEntity> AEntities => this.Teachers
.Join(this.Students, ...)
.Where(...)
.Select(...);
// similar for BEntities
}