опции только для чтения (без отслеживания изменений, SaveChanges должен выдавать) модель EFv4? - PullRequest
3 голосов
/ 18 февраля 2011

ПРИМЕЧАНИЕ: VS2010 / .NET 4, но без бета-версии SP1 на данный момент, но если что-то в SP1 решит эту проблему, было бы полезно узнать об этом.:)

У меня есть конкретная база данных, из которой я хочу читать, но никогда не буду писать.Я ничего не вижу в свойствах модели (глядя на дизайнера EF), чтобы пометить ее как доступную только для чтения.

Конечно, похоже, проще всего было бы добавить частичный класс для сгенерированногоПодкласс ObjectContext (класс FooModel: ObjectContext) для переопределения SaveChanges (SaveOptions) и его выдачи (возможно, подключение к SavingChanges и бросание тоже подойдут, на самом деле я тоже не пробовал).Это не отключило бы отслеживание изменений, и AFAICT мне пришлось бы перебирать все наборы сущностей при создании экземпляра контекста, чтобы пометить их как доступные только для чтения (хотя это проблема перфекта, поэтому она не так критична, как проверка изменений).не сохраняется).

Конечно, есть и другие варианты, такие как подключение строки подключения в качестве пользователя, имеющего только права на чтение, но мне интересно, какие варианты доступны с точки зрения дизайнера EF / модели / экземпляра для "чтениятолько объектные контексты?

1 Ответ

3 голосов
/ 18 февраля 2011

Существует только несколько способов сделать вашу модель доступной только для чтения

  • Объект без первичного ключа доступен только для чтения
  • Объект, отображенный в представлении БД (без первичного ключа), доступен только для чтения,То же самое применимо, если вы используете DefiningQuery в SSDL напрямую.
  • Объект, сопоставленный с QueryView в CSDL, доступен только для чтения.QueryView работает только поверх других объектов, поэтому это не решает вашу проблему в целом.

Ваше предложение с разрешениями доступа пользователей к базе данных выглядит наиболее безопасным способом.Если вы хотите запретить сохранение изменений, переопределяющих SaveChanges и выбрасывающих что-то вроде NotSupportedException, это также выглядит хорошим решением.

Поскольку вы будете работать только с объектами только для чтения, вы также можете повысить производительность запросов с помощью MergeOptions.NoTracking.

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