在运行时检索实体的数据模型定义

时间:2011-12-08 13:17:48

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

(或全部)EF Code-First,EF Model-First或L2S中,是否可以确定,例如,原始数据库表的名称 - 假设一个 - to-one mapping - 在运行时给定一个Entity类?

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

显然,我可以通过向实体添加元数据来实现这一点;例如,使用修改后的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是Generic,我会更喜欢它 - 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;

1 个答案:

答案 0 :(得分:2)

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

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