Dob*_*leA 9 c# linq reflection entity-framework
假设我有一个带有以下DbSet的DbContext
class Amimals : DbContext
{
public DbSet<Dog> Dogs { get; set; }
public DbSet<Cat> Cats { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在每个EntityTypeConfiguration内部,我为每个DbSet定义表
class DogConfig : EntityTypeConfiguration
{
public DogConfig()
{
this.ToTable("DOG_TABLE");
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我有表名和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 */
...
}
}
Run Code Online (Sandbox Code Playgroud)
Vik*_*tev 18
您可以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);
Run Code Online (Sandbox Code Playgroud)
你也可以使用Full Assembly Qualified Name Type.GetType('...')从字符串中获取类型
如果您可以通过某种方式以通用方式存储配置并使用通用context.Set<T>()方法,那将更加容易 .
| 归档时间: |
|
| 查看次数: |
10981 次 |
| 最近记录: |