EF代码首先:得到实体表名,而不会dataannotations [英] ef code first: get entity table name without dataannotations

查看:812
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆