Как получить тип магазина набора сущностей - PullRequest
3 голосов
/ 21 июня 2009

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

У меня есть 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 модели.

Я думаю, что store: Type информация в SSDL - это то, что мне нужно, но я не смог найти способ получить это значение с помощью API-интерфейса entity-framework.

Любая помощь будет оценена.

1 Ответ

2 голосов
/ 23 июня 2009

Ну, вы можете запросить метаданные в 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 через сопоставление.

К сожалению, EF не предоставляет доступ к общедоступной CSSPace (т. Е. Нет способа использовать API для чтения фрагмента MSL EDMX).

Так что для этого вам придется вручную обдумать элемент MSL, возможно, используя LINQ to XML или что-то в этом роде.

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

Alex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...