Я довольно много новичок в Entity Framework (в частности, версия 4), и я пытаюсь понять проблему, которая у меня есть.Entity Framework 4 и постоянные отношения внешних ключей
У меня есть проект ASP.NET MVC2, который я использую с Entity Framework 4 и классом репозитория. У меня есть простая внешняя связь, которую я определил. Когда я запускаю свой проект MVC, я могу загрузить форму MVC и обновить отношение внешнего ключа, установив идентификатор внешнего ключа на моем объекте. Я делаю это, вызвав OnPropertyIDChanging в частичном классе и установку EntityKey как так
this.ManufacturerReference.EntityKey = new System.Data.EntityKey("MachinesEntities.Manufacturers", "ManufacturerId", value);
Я создал второй проект, который является командной строкой проектом я использую, чтобы загрузить исходные данные для модели. Однако, когда я вызываю объект Репозитория для добавления объекта, который я получаю, он не может вставлять значения Null в таблицу дочерних сущностей (Производитель). Если я явно указать ссылку на родительский объект (продукт) в дочерний объект (Manufacturer) называл мое хранилище, чтобы получить объект производителя и настройка объекта производителя продукта я получаю исключение о том,
Объект сущности не может быть ссылка несколько экземпляров IEntityChangeTracker
Я предполагаю, что это результат того, что глобальная ссылка на контекст сущностей на каждом из моего репозитория объектов, и в результате у меня есть открытый контекст для производителя, а продукт.
Выполнение некоторых исследований, я видел, что, загружая объект из запроса, объектные отношения явно создаются через объект RelationshipEntry. Этого не происходит, когда я создаю объекты в приложении моей командной строки. Каков способ обойти это? Я предполагаю, что у меня будет такая же проблема, если я попытаюсь создать веб-службу, так как я создаю объект, не вызывая сначала SQL.
Во-вторых, существует ли наилучшая практика по управлению контекстом? Лучше ли иметь контекст, созданный и размещенный в каждом методе репозитория, глобальную ссылку в каждом из объектов репозитория или контекст, который передается каждому конструктору репозитория?
Спасибо!
Джон
Возможно, у меня проблема с настройкой моего внешнего ключа. Я решил попробовать реализовать подход Model First и настроить внешний ключ таким образом (а не через базу данных). Однако, если я не установил EntityKey, я бы получил ошибку вставки для дочерних отношений. Это может быть еще один признак того, как управляется Контекст. –
[This post] (http://blogs.msdn.com/efdesign/archive/2009/03/16/foreign-keys-in-the-entity-framework.aspx) объясняет, как настроить связь FK с моделью первый. –