Как добавить дочерние отношения при создании нового объекта в Entity Framework - PullRequest
2 голосов
/ 19 октября 2010

У меня есть настройка проекта структуры объекта. Это четыре таблицы и три объекта («A», «B» и «C»). Существует взаимосвязь 1: n между А и В, а также между А и С и взаимосвязь n: n между В и С.

alt text

Я использую следующий код, чтобы попытаться добавить новую сущность "B":

A t = null;
if (this.MyA == null)
{
    t = new A()
    {
        EntityKey = this.MyAReference.EntityKey,
        AId = (Guid)this.MyAReference.EntityKey.EntityKeyValues[0].Value
    };
}
else
{
    t = this.MyA;
}
this.MyA = null;
context.Attach(t);
this.MyA = t;

Объект "B" ("this") имеет дочернюю коллекцию объектов "C". Эти объекты «C» уже существуют в базе данных, но не связаны с новым объектом (очевидно). Когда я вызываю «SaveChanges ()», он выдает исключение, потому что он пытается добавить все дочерние объекты «C» новые объекты в базу данных.

Как мне заставить его просто создать ссылку в "Table_JoinBC", а не пытаться воссоздать объекты "C"?

Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 19 октября 2010

Это проще, если вы используете заглушки

Вы заявили, что хотите добавить новый объект B. И чтобы добавить объект B, вам нужен объект A

Вот пример использования заглушек:

A myAObject = new A { A_Id = 5 };

Context.AttachTo("Aes", myAObject);

B myBObject = new B { B_ID = 6, A = myAObject);

Context.AddToBes(myBObject)
Context.SaveChanges();
1 голос
/ 20 октября 2010

Вот что я получил, работая с дочерними коллекциями:

A myAObject = new A { A_Id = 5 };

Context.AttachTo("Aes", myAObject);

B myBObject = new B () { 
    B_ID = 6, 
    A = myAObject};

foreach( C c_obj in CsCollection){
    Context.AttachTo("Cs", c_obj);
    myBObject.C.Add(c_obj);
}


Context.AddToProducts(myBObject)
Context.SaveChanges();

Спасибо.

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