DbSet表名

Ale*_*dre 15 c# entity-framework-4.1

要在Entity framework 4.0上获取数据库表名,我会:

ObjectSetInstance.EntitySet.ToString()
Run Code Online (Sandbox Code Playgroud)

有没有办法在Entity Framework 4.1上执行此操作?

Rui*_*mba 24

DbContextObjectContext的扩展方法:

public static class ContextExtensions
{
    public static string GetTableName<T>(this DbContext context) where T : class
    {
        ObjectContext objectContext = ((IObjectContextAdapter) context).ObjectContext;

        return objectContext.GetTableName<T>();
    }

    public static string GetTableName<T>(this ObjectContext context) where T : class
    {
        string sql = context.CreateObjectSet<T>().ToTraceString();
        Regex regex = new Regex("FROM (?<table>.*) AS");
        Match match = regex.Match(sql);

        string table = match.Groups["table"].Value;
        return table;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用ObjectContext对象:

ObjectContext context = ....;
string table = context.GetTableName<Foo>();
Run Code Online (Sandbox Code Playgroud)

使用DbContext对象:

DbContext context = ....;
string table = context.GetTableName<Foo>();
Run Code Online (Sandbox Code Playgroud)

更多信息:

实体框架:从实体获取映射表名称


Dev*_*art 5

尝试这样的事情:

string name = (context as IObjectContextAdapter).ObjectContext.CreateObjectSet<MyClass>().EntitySet.Name;
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用 - 它不会获取我设置的 Table 属性,它只是返回类的复数名称。 (2认同)

Avi*_*rry 5

作为EF6.1的,该解决方案在探讨这个文章展示了如何使用新暴露的元数据来做到这一点,不应该需要对数据库进行初始化或依靠什么来设置表名的方法。