首先是代码:获取没有dataannotations的实体表名
有没有办法用DbModelBuilder定义表信息?
就像是:
entity.GetType().GetTableName()
马克斯
编辑:
id喜欢实现以下内容
public static class Helper { public string GetTableName(Type type) { // ?? } }
现在我想按类型获取表名
var type = someEntity.getType(); var sql = "delete from " + Helper.GetTableName(type) + " where id in (...)"
我能想象的唯一解决方案就是反思。 这里是
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 }
主要思想是在base.OnModelCreating调用之后获取配置对象。