Вопрос

Я пытаюсь фильтровать объекты по типам их магазинов (таблица или представление).

В моем тестовом проекте есть два объекта: один из них — таблица, а другой — представление.

<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 или что-то в этом роде.

Надеюсь это поможет

Алекс

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top