Добавление объекта в коллекцию свойств навигации создает новую сущность - PullRequest
2 голосов
/ 07 декабря 2010

Я использую Entity Framework 4.

Я пытаюсь связать новую сущность с существующей. Система заканчивает тем, что создает новую дочернюю сущность, когда на самом деле я просто хочу добавить ссылку на дочерний объект на родительский объект.

Между этими двумя сущностями существует отношение многие ко многим, поэтому я не могу просто установить свойство FK родительской сущности. Я попытался parent.ChildCollection.Add (child), который просто создает новый дочерний объект в базе данных. Это то, чего я пытаюсь избежать.

Я, должно быть, делаю что-то явно не так.

спасибо

обновленный пример кода

Пример кода для моих Self-Tracking-Entities, которые я должен сделать на стороне клиента Прямо сейчас у меня есть что-то вроде этого, чтобы получить всех детей с сервера, затем перебрать, чтобы найти тот, который я хочу, а затем добавить его в коллекцию объектов

          List<Service.Child> childs = _client.GetChildren();

Мне нужно пройтись по этой коллекции, чтобы найти нужную для добавления в коллекцию parent.childs, т. Е.

            List<Service.Child> childList = new List<Service.Child>();
            foreach (Service.Child child in childList) {
                if (child.ChildId == childId)
                    childList.Add(child);
            }
            contact.Childs = childList;

1 Ответ

1 голос
/ 07 декабря 2010

Если сущность изначально пришла из базы данных и имеет заполненные собственные свойства EntityKey, то при использовании Добавить для ее привязки к другой сущности ее EntityState изменится на Added .Несмотря на то, что это существующая сущность, SaveChanges создаст команду вставки для этой сущности.Вам следует рассмотреть возможность использования Attach вместо:

parent.ChildCollection.Attach(child);

Используя метод Attach, вы можете определить отношения между сущностями, которые уже существуют в ObjectContext, но которые не былиподключен автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...