Шаблоны фильтра .NET EntityStoreSchemaFilterEntry - PullRequest
3 голосов
/ 08 января 2010

Первый вопрос к SO, надеюсь, я делаю это правильно. ;)

Относительно System.Data.Entity.Design.EntityStoreSchemaFilterEntry:

Я ищу подробную документацию по этому классу. Документы MSDN не имеют ничего, кроме указания того, какие свойства существуют и их типы данных. Я хочу создать четко определенный список фильтров для

EntityStoreSchemaGenerator.GenerateStoreMetadata(
   IEnumerable<EntityStoreSchemaFilterEntry> filters
)

В частности:

  • Нужно ли устанавливать все Исключения перед Разрешением, чтобы разрешить только те записи, которые возвращаются?
  • Каковы последствия использования нуля в любом из параметров? Как насчет пустой строки ""? Комментарии об этом кажутся противоречивыми и не соответствуют моему опыту с их использованием.
  • Является ли подстановочный знак "все" простым "%"?

Моя цель - исключить все таблицы, представления и фильтры, а затем разрешить только те, которые мне нужны. Если я пытаюсь сделать это, я получаю файл edmx без сущностей. Похоже, что мой вариант «Исключить все» имеет приоритет над всеми таблицами, которые я пытался включить. Если я не пытаюсь исключить ненужные таблицы, я получаю таблицы «Разрешено» и все другие таблицы в базе данных, что делает фильтрацию бесполезной.

Для справки, единственная информация, которую я могу найти о правильных шаблонах шаблонов для фильтров, находится здесь: http://msdn.microsoft.com/en-us/library/ms710171(VS.85).aspx

Обратите внимание, что я вышел далеко за пределы EdmGen, отметил ошибки и ограничения в EdmGen2 и теперь пытаюсь выполнить то, что мне нужно, с помощью в основном расширенной базы EdmGen2.

Спасибо!

Ключевые слова для поиска людей по этой теме:

AEF ADO.NET Entity Framework
Tables Views Functions
EntityStoreSchemaFilterObjectTypes EntityStoreSchemaFilterEffect
EntityStoreSchemaGenerator GenerateStoreMetadata
EntityModelSchemaGenerator
SSDL CSDL MSL EDMX
EdmGen EdmGen2

1 Ответ

1 голос
/ 05 сентября 2011

Я обнаружил, что следующих фильтров достаточно для генерации SSDL для одной таблицы.

List<EntityStoreSchemaFilterEntry> filters = new List<EntityStoreSchemaFilterEntry>();
// Just generate for the Document table.
filters.Add(new EntityStoreSchemaFilterEntry(null, "dbo", "TargetTableNameHere", EntityStoreSchemaFilterObjectTypes.Table, EntityStoreSchemaFilterEffect.Allow));
filters.Add(new EntityStoreSchemaFilterEntry(null, "dbo", "%", EntityStoreSchemaFilterObjectTypes.Function, EntityStoreSchemaFilterEffect.Exclude));

// generate the SSDL
string ssdlNamespace = modelName + "Model.Store";
EntityStoreSchemaGenerator essg = new EntityStoreSchemaGenerator(provider, connectionString, ssdlNamespace);
essg.GenerateForeignKeyProperties = includeForeignKeys;

IList<EdmSchemaError> ssdlErrors = essg.GenerateStoreMetadata(filters, version);

Мне нужно было только явно исключить функции.

...