如何以编程方式从实体获取具有模式名称的数据库表名称

Pau*_*ulP 4 c# linq entity-framework

我正在尝试获取实体的SQL表名称.当我使用MetadataWorkspace查询时,我从对象或存储空间获取大量信息.但架构名称和表名称不存在.

我尝试查询CSpace和SSpace的所有EntityType对象,我可以看到两者都正确列出,但我无法弄清楚如何从CSpace获取SSpace.

所以说我在对象模型中有一个名为User的类型 - 如何在数据库中找到带有模式名称(tkp.User)的表名?

有没有办法做到这一点?

NSG*_*aga 7

没有perfect答案,但这应该工作......

var ssSpaceSet = objectContext.MetadataWorkspace
    .GetItems<EntityContainer>(DataSpace.SSpace).First()
    .BaseEntitySets
    .First(meta => meta.ElementType.Name == "YourEntityName");
Run Code Online (Sandbox Code Playgroud)

如果在调试器中查找,Table属性应该具有真实的表名.

你需要reflection在最后一部分使用.
好消息是它应该透明地使用EF6(因为它有类似的基类)

(它的相似之处schema,也应该在那里 - 这是spaceDb/SQL映射名称,facet等)

查看我的这篇文章,其中包含许多详细信息
Get Model schema以使用不支持CreateDatabase的提供程序以编程方式创建数据库


获取模型模式以使用不支持CreateDatabase的提供程序以编程方式创建数据库
如何以编程方式读取EF DbContext元数据?
如何检查单元测试在ORM模型中计算的属性标记?
EF5中的程序化数据转换Code First
Framework实体框架MigrationSqlGenerator for SQLite
http://entityframework.codeplex.com/
实体框架 -
首先从实体ef代码获取表名:获取实体表名而不使用数据注释
从实体框架MetaData获取数据库表名
http://www.codeproject.com/Articles/350135/Entity-Framework-Get-mapped-table-name-from-an-ent