EF代码首先:得到实体表名,而不会dataannotations [英] ef code first: get entity table name without dataannotations
本文介绍了EF代码首先:得到实体表名,而不会dataannotations的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有没有办法让与DbModelBuilder定义的表信息
是这样的:
entity.GetType()。getTableName时()
最大
编辑:
我还想来实施以下
公共静态类助手
{
公共字符串getTableName时(类型类型){
//?
}
}
现在我想用类型来获得表名
VAR类型= someEntity.getType();
VAR SQL =从删除+ Helper.GetTableName(型)+其中id在(...)
解决方案
唯一能做的我能想象的反思。这
保护覆盖无效OnModelCreating(DbModelBuilder模型构建器)
{
//模型映射
base.OnModelCreating(模型构建器);
//映射表
无功配置= modelBuilder.Configurations
.GetPrivateFieldValue(_ modelConfiguration)
.GetPrivateFieldValue(ActiveEntityConfigurations);
变种映射=新的Hashtable();
的foreach(VAR℃的(IEnumerable的)配置)
{
VAR类型=(类型)c.GetPrivateFieldValue(ClrType);
VAR tableName值=(字符串)c.GetPrivateFieldValue(EntitySetName);
映射【类型】= tableName值;
}
//存储映射等。无论需要
}
主要想法是让配置对象base.OnModelCreating呼吁之后。
Is there a way to get table info defined with DbModelBuilder?
something like:
entity.GetType().GetTableName()
Max
EDIT:
id like to implement following
public static class Helper
{
public string GetTableName(Type type) {
// ??
}
}
now i'd like to get table name by type
var type = someEntity.getType();
var sql = "delete from " + Helper.GetTableName(type) + " where id in (...)"
解决方案
Only solution i can imagine is reflection. Here it is
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// model mappings
base.OnModelCreating(modelBuilder);
// table mapping
var config = modelBuilder.Configurations
.GetPrivateFieldValue("_modelConfiguration")
.GetPrivateFieldValue("ActiveEntityConfigurations");
var mapping = new Hashtable();
foreach (var c in (IEnumerable)config)
{
var type = (Type)c.GetPrivateFieldValue("ClrType");
var tableName = (string)c.GetPrivateFieldValue("EntitySetName");
mapping[type] = tableName;
}
// store mapping whereever needed
}
Main idea is to get configuration object after base.OnModelCreating has called.
这篇关于EF代码首先:得到实体表名,而不会dataannotations的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文