【发布时间】: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