说我有一个带有以下DbSet的DbContext
class Amimals : DbContext
{
public DbSet<Dog> Dogs { get; set; }
public DbSet<Cat> Cats { get; set; }
}
在每个EntityTypeConfiguration的内部,我正在为每个DbSet定义表,例如
class DogConfig : EntityTypeConfiguration
{
public DogConfig()
{
this.ToTable("DOG_TABLE");
...
}
}
现在,如果我有表名和DbContext,该如何获取和使用正确的DbSet?
void foo()
{
string tableName = this.GetTableName();
using(Animals context = new Animals())
{
/* Made up solution */
DbSet animalContext = context.Where(c => c.TableName == tableName);
...
/* Do something with DbSet */
...
}
}
您可以Type
使用方法从DbContext获取DbSet DbContext.Set(Type entityType)
。因此,如果您将模型类名称作为字符串,则应该对实际的clr类型进行一些映射。
例如:
string tableName = "Cat";
var type = Assembly.GetExecutingAssembly()
.GetTypes()
.FirstOrDefault(t => t.Name == tableName);
if(type != null)
DbSet catContext = context.Set(type);
您也可以使用完整程序集合格名称Type.GetType('...')从字符串中获取类型。
如果您可以某种方式以通用方式存储配置并使用通用context.Set<T>()
方法,则将更加容易。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句