Я работаю над веб-приложением в стиле CRM MVC, которое имеет следующую (упрощенную) схему:
Таблица контактов
- ContactId
- Имя
- Фамилия
- И т. Д.
Теги Таблица
Таблица ContactTags
Затем я сгенерировал объекты POCO из файла * .edmx, взаимодействуя с основанным на DbContextконтекст сущностей, скрывающий таблицу ContactTags, так что связь между сущностями Contact и Tag моделируется как связь «многие ко многим».Затем я ограничил доступ к необработанному свойству навигации Contact.Tags, установив его внутренним, а не общедоступным, и выставил коллекцию ReadOnlyCollection, которую можно использовать за пределами уровня домена для отображения тегов, но ограничив операции с данными в коллекции контактом.Метод .EditTags ().
После написания кода пользовательского интерфейса для отображения списка тегов в контакте я обнаружил, что свойство навигации по тегам не загружается с отложенной загрузкой.После того, как я почесал голову и немного погуглил, я обнаружил еще один вопрос в EF CTP4 «Ленивая загрузка не играет в мяч» , который соответствовал моей проблеме.Автор вопроса обнаружил, что когда он изменил внутреннее свойство как общедоступное, оно начало работать, и, конечно же, это то же самое, что случилось со мной - я изменил свойство навигации по тегам на общедоступное, и теперь оно работает.
Мне неудобно это с точки зрения моделирования объектов / инкапсуляции данных, так как пользовательскому интерфейсу не следует предоставлять доступ к необработанной коллекции тегов, которая позволила бы коду контроллера вызывать Tags.Add (), Tags. Удалить и т. Д.
Кто-нибудь знает, является ли это ошибкой или преднамеренным решением команды EF?Можно ли получить свойство внутренней навигации быть загруженным с отложенной загрузкой?Я знаю, что мы могли бы загрузить, но мы хотели бы избежать этого, если это вообще возможно.