如何在多对多关系中为每个配对公开额外的列数据?

时间:2011-03-06 17:08:50

标签: entity-framework

我有一个Cars表,一个BodyPaints表和一个Cars_BodyPaints关联表,用于定义各种车辆可能的油漆作业。汽车和BodyPaints之间的联系是多对多的。

我想为每个(Car,Paint)映射创建一个额外的数据,以定义特定汽车上特定油漆作业的成本。我已经向Cars_BodyPaints添加了一个额外的列来记录每个配对的价格,但是当我从数据库更新模型类时,我没有看到它暴露在任何实体类中。这让我相信我的方法可能在这里错了。我除了要生成一些方法之外,所以我可以执行如下代码:

Car civic = (from c in context.Cars  where c.Name == "Civic" select c).Single();
Paint red = (from p in civic.Paints  where p.Name == "Red"   select p).Single();

var price = civic.GetPrice(red);

我离开基地吗?你会如何做到这一点?

由于

1 个答案:

答案 0 :(得分:1)

在使用属性建立多对多关系时,您需要将关系建模为实体本身。您将为Cars_BodyPaints表创建一个新实体,它将包含您的额外价格列作为属性。在考虑CarsBodyPaints之间的关系时,必须遍历这个新的中间实体,并且也可以直接查询。

Cars <-- Cars_BodyPaints --> BodyPaints

在这个新模型中,您的查询看起来更像是:

(from bp in context.CarBodyPaints
where bp.Car.Name = "Civic" and bp.Paint.Name = "Red"
select bp.Price).Single()