4

我正在尝试获取实体的 SQL 表名。当我使用 MetadataWorkspace 查询时,我会从对象或存储空间中获得大量信息。但是模式名称和表名称不存在。

我尝试查询 CSpace 和 SSpace 的所有 EntityType 对象,我可以看到两者都正确列出,但我不知道如何从 CSpace 获取 SSpace。

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

有没有办法做到这一点?

4

1 回答 1

7

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

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

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

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

(类似 for schema,也应该在其中 - 这是space用于 Db/SQL 映射名称、构面等)

请参阅我的这篇文章以及许多详细信息
获取模型模式以使用不支持 CreateDatabase 的提供程序以编程方式创建数据库


获取模型架构以使用不支持 CreateDatabase 的提供程序以编程方式创建数据库
如何以编程方式读取 EF DbContext 元数据?
如何通过单元测试检查属性标记为在 ORM 模型中计算?
EF5 Code First 迁移中的编程数据转换
Entity Framework MigrationSqlGenerator for SQLite
http://entityframework.codeplex.com/
Entity Framework - Get Table name from the Entity
ef code first: get entity table name without dataannotations
Get Database Table Name from Entity Framework MetaData
http://www.codeproject.com/Articles/350135/Entity-Framework-Get-mapped-table-name-from-an-ent

于 2013-04-11T11:15:12.410 回答