EF 4.0插入具有多对多关系的实体

时间:2011-07-11 14:16:40

标签: entity-framework entity-framework-4

我正在使用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 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

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在内部管理多对多连接表,因此您不必关心此表中的记录。除了将卡车类型附加到上下文之外,您还可以在查询中从数据库中获取它们。

答案 1 :(得分:0)

再看一个实现同样事情的例子。当新对象添加到Context时,对象树中所有对象的状态将更改为Added,因此EF会尝试将所有此类对象保存为新记录。