C# 如何以编程方式从实体中获取具有模式名的数据库表名
我正在尝试获取实体的SQL表名。 当我使用MetadataWorkspace查询时,我从对象或存储空间中获得了大量信息。但架构名和表名不存在 我尝试为CSpace和SSpace查询所有EntityType对象,我可以正确地看到这两个对象的列表,但我不知道如何从CSpace获取SSpace 假设我在对象模型中有一个名为User的类型-如何在数据库中找到具有模式名(tkp.User)的tablenameC# 如何以编程方式从实体中获取具有模式名的数据库表名,c#,linq,entity-framework,C#,Linq,Entity Framework,我正在尝试获取实体的SQL表名。 当我使用MetadataWorkspace查询时,我从对象或存储空间中获得了大量信息。但架构名和表名不存在 我尝试为CSpace和SSpace查询所有EntityType对象,我可以正确地看到这两个对象的列表,但我不知道如何从CSpace获取SSpace 假设我在对象模型中有一个名为User的类型-如何在数据库中找到具有模式名(tkp.User)的tablename 有什么方法可以做到这一点吗?没有完美的答案,但这应该是可行的 var ssSpaceSet =
有什么方法可以做到这一点吗?没有完美的答案,但这应该是可行的
var ssSpaceSet = objectContext.MetadataWorkspace
.GetItems<EntityContainer>(DataSpace.SSpace).First()
.BaseEntitySets
.First(meta => meta.ElementType.Name == "YourEntityName");
var ssSpaceSet=objectContext.MetadataWorkspace
.GetItems(DataSpace.SSpace).First()
.BaseEntitySets
.First(meta=>meta.ElementType.Name==“YourEntityName”);
如果在调试器中查找,Table
属性应该具有实际的表名
您需要在最后一部分中使用反射。
好消息是它也应该透明地与EF6一起工作
(因为它具有类似的基类)
(类似于模式
,也应该在那里-这是Db/SQL映射名称、facet等的空间
)
查看我的这篇文章,了解更多细节
非常感谢。我通过schema属性找到了schema名称。如何从simple DbContext获取schema名称?@evc您有什么问题?这是一个粗略的笔划解决方案和表格,模式都在里面,您可以直接从DbContext中获取ObjectContext,PaulP提到了模式属性等。在EF 6.*(新的)中,您有更好的方法,或者说,发现它非常简单<代码>(ObjectContext)MyDbContext