EF 4.0 Вставка сущности с отношением «многие ко многим» - PullRequest
1 голос
/ 11 июля 2011

Я использую объекты POCO.

A имеет много-много таких отношений:

Таблицы БД:

Car-CarTrackType-TrackType

Объекты модели:

Car - Track

Я хочу вставить автомобили, которые принадлежат разным TrackTypes.Возможно ли в EF 4.0 создать такой запрос для обработки вставки, как эта, за один раз?

Что я имею в виду:

У меня есть такие значения в таблице TrackType:

TrackType
1 Good
2 Bad
3 Weat

Я хочу, чтобы моя вставка дала такой результат:

Car(Table)         CarTrackType(Table)
1 BMW              1  2 (CarId, TrackTypeId)          
2 Volvo            1  1
                   1  3
                   2  2
                   2  3 

Есть предложения?

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Вы можете попробовать что-то вроде этого:

using (var context = new MyContext())
{
    var truckTypeGood = new TruckType { ID = 1 };
    var truckTypeBad = new TruckType { ID = 2 };
    var truckTypeWeat = new TruckType { ID = 3 };

    context.TruckTypes.Attach(truckTypeGood);
    context.TruckTypes.Attach(truckTypeBad);
    context.TruckTypes.Attach(truckTypeWeat);

    var bmw = new Car {
        Name = "BMW",
        TruckTypes = new List<TruckType>()
        {
            truckTypeGood,
            truckTypeBad,
            truckTypeWeat
        } };

    context.Cars.AddObject(bmw);

    var volvo = new Car {
        Name = "Volvo",
        TruckTypes = new List<TruckType>()
        {
            truckTypeBad,
            truckTypeWeat
        } };

    context.Cars.AddObject(volvo);

    context.SaveChanges();
}

EF управляет внутренней таблицей соединений «многие ко многим», поэтому вам не нужно заботиться о записях в этой таблице. Вместо того, чтобы присоединять типы грузовиков к контексту в качестве альтернативы, вы также можете извлечь их из БД в запросе.

0 голосов
/ 05 марта 2012

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

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