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

本文关键字:数据模型 定义 实体 运行时 检索 | 更新日期: 2023-09-27 18:17:05

(或全部)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; 

编辑:我不确定哪一个更好,但似乎你也可以得到表名如下。乍一看,我更喜欢第二种方法,尽管我更喜欢映射。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;

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

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

扩展讨论和可能的解决方案:从实体框架元数据中获取数据库表名