gpt4 book ai didi

entity-framework - 如何获取实体集的存储类型

转载 作者:行者123 更新时间:2023-12-04 07:25:49 25 4
gpt4 key购买 nike

我正在尝试根据商店类型(表格或 View )过滤实体。

我的测试项目中有 2 个实体,一个源是表,另一个源是 View 。

<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 中的 store:Type 信息是我所需要的,但我找不到使用 Entity Framework API 检索该值的方法。

我们将不胜感激。

最佳答案

您可以通过查看 SSpace 或 StoreItemCollection 来查询 SSDL 中的元数据。

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();

不幸的是,这不会帮助您将类与它们来自表还是 View 联系起来。因为实体(即你在 CSpace 中编码的实体)而不是描述表格形状的实体(即 SSpace 实体)在 CSpace 中并且为了知道实体是否来自 View 或表,你需要能够通过映射从 CSpace EntitySet 到 SSpace EntitySet。

不幸的是,EF 没有公开公共(public) CSSPace(即无法使用 API 读取 EDMX 的 MSL 片段)。

因此,为了做到这一点,您必须手动推理 MSL 元素,可能使用 LINQ to XML 或其他东西。

希望对你有帮助

亚历克斯

关于entity-framework - 如何获取实体集的存储类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1024334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com