Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式从实体中获取具有模式名的数据库表名_C#_Linq_Entity Framework - Fatal编程技术网

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

C# 如何以编程方式从实体中获取具有模式名的数据库表名,c#,linq,entity-framework,C#,Linq,Entity Framework,我正在尝试获取实体的SQL表名。 当我使用MetadataWorkspace查询时,我从对象或存储空间中获得了大量信息。但架构名和表名不存在 我尝试为CSpace和SSpace查询所有EntityType对象,我可以正确地看到这两个对象的列表,但我不知道如何从CSpace获取SSpace 假设我在对象模型中有一个名为User的类型-如何在数据库中找到具有模式名(tkp.User)的tablename 有什么方法可以做到这一点吗?没有完美的答案,但这应该是可行的 var ssSpaceSet =

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

我尝试为CSpace和SSpace查询所有EntityType对象,我可以正确地看到这两个对象的列表,但我不知道如何从CSpace获取SSpace

假设我在对象模型中有一个名为User的类型-如何在数据库中找到具有模式名(tkp.User)的tablename


有什么方法可以做到这一点吗?

没有完美的答案,但这应该是可行的

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