我试着过滤器的实体根据自己商店的类型(表或视)。

我有2个实体在我的试验项目,一个来源是一个表格,以及其他的来源是图。

<EntitySet Name="Test" EntityType="TestModel.Store.Test" store:Type="Tables" Schema="dbo" />
<EntitySet Name="TestView" EntityType="TestModel.Store.TestView" store:Type="Views" store:Schema="dbo" store:Name="TestView">

代码样本上取自模型的edmx文件 SSDL 部分。

我认为的 储存:类型 信息SSDL是我需要什么但是我不能找到一种方法检索这一价值的使用实体的框架。

任何帮助,将不胜感激。

有帮助吗?

解决方案

好了你可以查询的元数据在SSDL通过在SSpace或StoreItemCollection.

var sspaceEntitySets = context.MetadataWorkspace
                       .GetItems<EntityContainer>(DataSpace.SSpace)
                       .First().BaseEntitySets.OfType<EntitySet>();
var entitySet = sspaceEntitySets.First();
var tableType = entitySet
.MetadataProperties["http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator:Type"]
.Value.ToString();

不幸的是这不会帮助你配合你的类别,他们是否来自一个表格或图。因为的实体(即你代码对在CSpace),而不是那些描述的形状的表(即SSpace的)是在CSpace和在以知道,是否一个实体来自一个图或表,你会需要能够得到从CSpace实体集到SSpace实体集通过的映射。

不幸的是EF不公开公共CSSPace(即有没有办法使用API读MSL的片段EDMX).

因此,为了做到这一点,你必须手动的原因在MSL元件,很可能使用皇宫XML或东西。

希望这可以帮助

亚历克斯

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top