Как получить тип магазина набора сущностей
-
06-07-2019 - |
Вопрос
Я пытаюсь фильтровать объекты по типам их магазинов (таблица или представление).
В моем тестовом проекте есть два объекта: один из них — таблица, а другой — представление.
<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 — это то, что мне нужно, но я не смог найти способ получить это значение с помощью API сущности-фреймворка.
Любая помощь будет оценена по достоинству.
Решение
Что ж, вы можете запросить метаданные в 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 EntitySet в SSpace EntitySet через Mapping.
К сожалению, EF не предоставляет общедоступный CSSPace (т.нет возможности использовать API для чтения фрагмента MSL EDMX).
Итак, чтобы сделать это, вам придется вручную обдумать элемент MSL, возможно, используя LINQ to XML или что-то в этом роде.
Надеюсь это поможет
Алекс