Entity Framework Model First Navigation Свойства добавляют неверные имена столбцов в запрос? - PullRequest
2 голосов
/ 12 декабря 2011

В нашей базе данных есть следующие таблицы

Tags
  Id (int)
  Name (string)
  IsActive (bool)
  TagType (string)

и

DocumentStyles
  Id (int)
  Name (string)
  StyleRules (string)
  IsAvailable (bool)
  ThumbnailFileId (int nullable)
  ConceptTagId (int nullable)

С конструктором EF 4.2 я создал соответствующие сущности и пытаюсь связатьвнешний ключ ConceptTagId к модели тегов.

Когда я добавляю ассоциацию (0..1 ко многим из Tag в DocumentStyle), он правильно связывает внешний ключ и добавляет свойство навигации ConceptTag в DocumentStyleобъект.Мне не нужно свойство навигации для объекта Tag.

Однако при вызове следующего кода в хранилище

db.DocumentStyles.Include(d => d.ConceptTag).ToList();

результирующий запрос пытается получить доступ к свойству DocumentStyle_ID в таблице тегов., которого не существует, и не должно.Внешний ключ - это ConceptTagId для таблицы DocumentStyle.

Откуда этот столбец идентификатора и как от него избавиться?

Из окна свойств соответствующей ассоциации:

End1 Кратность: * DocumentStyleEnd1 Nav Свойство: ConceptTagEnd2 кратность: ноль одного тегаСвойство End2 Nav: {NULL} (пусто в свойстве)

1 Ответ

1 голос
/ 13 декабря 2011

При дальнейшем расследовании происходит нарушение соглашения о стилях именования. Чтобы решить эту проблему, мне пришлось реализовать в событии OnModelCreating следующее правило

builder.Entity<DocumentStyle>().HasOptional(ds => ds.ConceptTag).WithMany(); 

Это позволяет каркасу знать, что у тега нет взаимного свойства, ожидаемого в отношении, и не пытается найти свойство DocumentStyle_Id в будущих запросах

...