【问题标题】:Retrieve Data Model definition for Entity at Runtime在运行时检索实体的数据模型定义
【发布时间】:2011-12-08 13:17:48
【问题描述】:

任一(或所有)EF Code-First、EF Model-First 或 L2S 中,是否可以确定,例如,原始数据库表的名称 - 假设一个 -一对一映射 - 在运行时给定一个实体类?

例如,如果我有一个带有名为“People”的表的数据库,我已通过上述 ORM 将其映射到我的实体类“Person”,那么有没有一种方法可以给定相应的 DataContexts 和/或实体类 Type/ Instance,确定原始数据库表名; “人”?

显然,我可以通过将元数据添加到实体中来做到这一点;例如,使用修改后的 T4 模板或自定义属性(类似于我认为 L2S 将信息存储在上下文中的方式),但我想知道我是否可以开箱即用?

提前致谢!

编辑:好的,我想我已经找到了如何在 Linq 2 Sql 中执行此操作,所以问题只存在于 EF 中。

// for L2S the Table Name can be retrieved as so...
object[] info = typeof(TSource).GetCustomAttributes(typeof(System.Data.Linq.Mapping.TableAttribute), true); 
String table = (info[0] as System.Data.Linq.Mapping.TableAttribute).Name; 

编辑:我不确定哪个更好,但似乎您也可以按如下方式获取表名。乍一看,我更喜欢第二种方法,但如果 Mapping.GetTable 是通用的,我更喜欢它 - GetTable<TSource>()

// for L2S the Table Name can be retrieved via the Context's mapping as so:
string TableName = context.Mapping.GetTable(typeof(TSource)).TableName;

【问题讨论】:

    标签: c# .net entity-framework linq-to-sql


    【解决方案1】:

    关于 EF 的简短回答:不,这不容易。

    扩展讨论和可能的解决方法:Get Database Table Name from Entity Framework MetaData

    【讨论】:

    • 谢谢丹尼斯。我没想到它会过于简单,在那次讨论中用于获取表名的方法看起来不太友好,这可能会导致优化将元数据存储在某个地方,这反过来又使它不值得 - 为什么不仅仅是在设计时存储元数据。因此,关于如何存储数据的任何建议?通过 T4 获得属性还是有更好的方法?再次感谢!
    • 我也想不出更好的方法,抱歉。
    猜你喜欢
    • 2020-12-13
    • 1970-01-01
    • 2011-06-29
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多