Внутренние классы с ADO.NET Entity Framework

Я использую Entity Framework для создания своего уровня доступа к данным и хочу, чтобы все мои классы были internal.

Я знаю, что это можно вручную назначить в дизайнере для каждого класса.

ОБНОВЛЕНИЕ Я обнаружил, что мое первоначальное утверждение

Но похоже, что также требуется установить внутренний модификатор для каждого отдельного свойства в каждом классе! У меня около 30+ сущностей, и это будет огромная работа.

был неверным. Мне не хватало того, что когда я устанавливаю доступ к Entity Type, мне также нужно установить соответствующий доступ к Entity Set.

Знаете ли вы какие-либо идеи, как установить «доступ по умолчанию» для всей модели?


person Regent    schedule 24.03.2010    source источник


Ответы (2)


Чего именно вы пытаетесь достичь? Если бы каждый класс в вашей модели был объявлен внутренним и все его свойства были бы объявлены внутренними, это сделало бы вашу модель бесполезной. Что-то должно будет получить к нему доступ и работать с ним когда-нибудь...

Вы пытаетесь предотвратить конкретное использование модели? Есть лучшие способы сделать это.

ОБНОВЛЕНИЕ: похоже, что VS2010 позволит использовать внутренний ObjectContext через шаблоны T4. Посмотрите здесь: http://blogs.msdn.com/efdesign/archive/2009/01/22/customizing-entity-classes-with-t4.aspx

person ctorx    schedule 24.03.2010
comment
По дизайну классы из этой DataAccess библиотеки должны использоваться только другой очень конкретной Model сборкой. У меня будет атрибут InternalsVisibleTo в DataAccess, поэтому только Model сможет использовать его классы. - person Regent; 25.03.2010
comment
Если вам нужно, чтобы они были помечены как внутренние, вам придется вручную изменить файл конструктора. Если ваша модель никогда не меняется, это на самом деле не проблема... но если она изменится, вы можете оказаться в ситуации, когда файл конструктора (который создается автоматически) перезаписывает ваши изменения. Если вы можете использовать 2010, похоже, что шаблоны T4 позволяют вам достичь того, что вам нужно (blogs.msdn.com/efdesign/archive/2009/01/22/) - person ctorx; 25.03.2010

На самом деле, если ваш класс является внутренним, не имеет значения, являются ли свойства общедоступными - сам класс не виден за пределами вашего проекта, поэтому к свойствам никогда нельзя получить доступ (если только не через отражение)

person Steffen    schedule 24.03.2010
comment
Верно, но, как я обнаружил, моя проблема заключалась в том, что я пропустил, что если я установил внутреннюю видимость для Entity Type, то мне также нужно установить как минимум внутреннюю видимость для Entity Set. - person Regent; 25.03.2010
comment
Но, к сожалению, я не нашел, как установить видимость на уровне EntityContainer. - person Regent; 25.03.2010
comment
Используя подход CodeFirst, вы полностью контролируете свою модель. - person Marcel Valdez Orozco; 16.03.2012