EntityFramework 6 RC1 Включить свойство Many-to-Many не удается

c# entity-framework entity-framework-6

Вопрос

У меня есть отношение «многие ко многим» между агентами и агентами (psuedocode, сокращенно).

public class Agent { 
    public virtual List<AgentGroup> AgentGroups { get; set; } 
}

public class AgentGroup { 
    public virtual List<Agent> Agents { get; set; } 
}

В какой-то момент кода я хочу получить все AgentGroups, и я хочу предварительно выбрать / включить агентов для каждой группы. Я также хочу предварительно заполнить коллекцию AgentGroups для агентов. Это работало в бета-версии EF 6, но больше не работает в EF 6 rc1:

public class Agent { 
    public virtual List<AgentGroup> AgentGroups { get; set; } 
}

public class AgentGroup { 
    public virtual List<Agent> Agents { get; set; } 
}

Сообщение об ошибке, которое я получаю, это

Недопустимое имя объекта 'dbo.AgentAgentGroups'.

А на самом деле нет таблицы AgentAgentGroups , таблица - dbo.AgentGroupAgents . Любые идеи о том, чтобы заставить это работать снова?

В настоящее время у меня нет аннотаций, и я не использую свободный API, все это строго соответствует первым правилам кода по умолчанию.

Принятый ответ

В rc1, по-видимому, происходит изменение соглашения об именах таблицы переходов во многих ассоциациях. Когда я пробую вашу модель в различных версиях EF, это то, что я вижу:

  • EF5 (стабильный): AgentGroupAgents
  • EF6 (бета): AgentGroupAgents
  • EF6 (rc1): AgentAgentGroups

Было бы неплохо, если бета была другой, но rc1 отличается от последней версии RTM, что делает это изменением. Хороший улов!

редактировать

Ответ от команды EF :

Здравствуйте,
До EF6 были некоторые области создания модели, которые были недетерминированными - в зависимости от того, работали ли вы на x86 или x64, вы могли получить другую модель. Многие из многих присоединились к имени таблицы в одной из этих областей. В EF6 мы обратились к этому, чтобы гарантировать, что результаты всегда будут одинаковыми. К сожалению, это означает, что для некоторых моделей (в зависимости от архитектуры, на которой они работали) обновление до EF6 может привести к изменению модели. Но модель, которая теперь рассчитана, будет согласована между машинами и будущими версиями EF. Если вы хотите продолжить использовать исходное имя, лучшим вариантом является использование Fluent API для указания имени таблицы соединений .
~ Rowan




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему