我有很多表格,它们具有相同的模型结构,但具有其他表格名称和其他数据(在这种情况下将是约100个表格)。 我想使用Entity Framework在运行时动态切换表格名称(例如从路由获取表格名称)。 数据库中的表格会被其他脚本动态添加和删除。 有没有一种像这样具有良好性能的方法来实现这一点?
db.Table("TableName")<SpecificModel>.Where(x => x.ID == ID)
我有很多表格,它们具有相同的模型结构,但具有其他表格名称和其他数据(在这种情况下将是约100个表格)。 我想使用Entity Framework在运行时动态切换表格名称(例如从路由获取表格名称)。 数据库中的表格会被其他脚本动态添加和删除。 有没有一种像这样具有良好性能的方法来实现这一点?
db.Table("TableName")<SpecificModel>.Where(x => x.ID == ID)
你想像这样做吗?
foreach (string tableName in new[] { "Table1", "Table2" })
{
var result = dbContext.Database.SqlQuery<SpecificModel>(string.Format("SELECT * FROM {0} WHERE ID=@p0", tableName), 1).FirstOrDefault();
}
[ACME$Customer]
[SuperCorp$Customer]
我最终采用了动态编译。由于这是一篇非常详细的博客文章,所以我在这里不会深入解释。
// Gets entity type from specified namespace/assembly
Type entityType = Type.GetType(string.Format("Your.NameSpace.{0},{1}", entityName, "Assembly.Name"));
// Finds item to update based on its primary key value
var entity = _dbContext.Find(entityType, entityKey);
// Finds column to update preference for
PropertyInfo propertyInfo = entity.GetType().GetProperty(entityField);
// Set and update (date example given)
propertyInfo.SetValue(entity, isOptIn ? (DateTime?)null : (DateTimeOffset?)DateTime.Now, null);
_dbContext.SaveChanges();
var tableName = item.TableName;
Type entityType = Type.GetType(string.Format("AlbashaSweets.Models.{0}", tableName));
var data = _DBContext.Set(entityType);
//AlbashaSweets.Models is Your Namespace