У меня проблема, которая поставила меня в тупик.У нас есть сборка модели и сборка репозитория.Слой модели содержит классы, которые сопоставляются с нашей базой данных производными DbContext репозиториями на уровне репозиториев.До сих пор они шли без заминки.
В модели у нас есть связь один ко многим Вопрос 1 - * Ответ (Question.Answers и Answer.Question являются сопоставленными навигационными свойствами).Теперь у нас есть требование пометить Вопрос.Ответы как внутренние, поскольку это не имеет смысла вне модели.Когда мы вносим изменение с: public virtual IList<Answer> ...
на internal virtual IList<Answer> ...
, мы получаем исключение:
Указанный путь включения недействителен.EntityType Repositories.Question
не объявляет свойство навигации с именем Answers
.
Прежде всего, это исключение является странным, поскольку оно ссылается на тип Repositories.Question
, который не существует!Это должно быть Model.Question
.
В сборке Model InternalsVisibleTo уже установлено значение Repositories:
[assembly: InternalsVisibleTo("Repositories")]
Это означает, что мы не получим ошибки компиляции в коде сопоставления, и мы попробовалиследующее:
[assembly: InternalsVisibleTo("EntityFramework")]
[assembly: InternalsVisibleTo("System.Data.Entity")]
Но мы все еще получаем вышеупомянутое исключение.
Есть идеи, почему мы получаем это?
Редактировать
ЛадиславМрнка, спасибо за помощь!Это все еще причиняет нам боль.
Мы уже определили отношение, используя свободный API:
modelBuilder.Entity<Answer>()
.HasRequired(a => a.Question)
.WithMany(q => q.Answers)
.Map(x => x.MapKey("QuestionId"));
И это работает, когда свойство q.Answers установлено в public.Данные читаются и записываются в базу данных без проблем.Когда мы изменяем его на внутренний, наш код по-прежнему компилируется (как мы используем InternalsVisibleTo), но мы получаем вышеупомянутое исключение при запуске наших интеграционных тестов.
Я изменил строку подключения на новое имя каталога иEF без проблем создает базу данных и ожидаемые ограничения.Так что все работает как положено.Проблема возникает только при изменении модификатора доступа к свойствам навигации
С уважением,
Стивен