2012-04-25 67 views
1

我无法弄清楚你在linq-to-sql中如何做到这一点。更新外键列

简单的外键示例如下。

CARS TABLE 
Columns - CARID (PK), NAME, SIZE, MODELID(FK) 


MODELS TABLE 
Columns MODELID(PK), MODELNAME 

更改SQL车的型号我会

UPDATE CARS 
SET MODELID = 'MODEL88' 
WHERE CARID = 'CAR01' 

在LINQ到SQL我试图做同样的事情,但更新不工作。

Car car = db.Cars.Where(x => x.CarId == "CAR01").FirstOrDefault(); 
Model model = db.Models.Single(c => c.ModelId == "MODEL88"); 
car.Model = model; 
db.SubmitChanges(); 

没有例外,它只是不做更新。更新不是外键的其他字段可以工作,例如尺寸。

Car car = db.Cars.Where(x => x.CarId == "CAR01").FirstOrDefault(); 
car.Size = "22"; 
db.SubmitChanges(); 

回答

1

嗯,光怪陆离。数据库中是否建立了关系?这是反映在你的.DBML?

出于好奇,如果你添加carCars colleciton上model,像这样它的工作原理:

Car car = db.Cars.Where(x => x.CarId == "CAR01").FirstOrDefault(); 
Model model = db.Models.Single(c => c.ModelId == "MODEL88"); 
model.Cars.Add(car) 
db.SubmitChanges(); 
+0

父类:模型子类:汽车在dbml中,我会尝试.Add现在加入 – Hoody 2012-04-25 10:19:59

+0

.Add(汽车)不起作用 – Hoody 2012-04-25 10:45:04

+0

您的答案有帮助,因为它表明我没有做错任何事。从头开始重新创建所有东西,所以一定会损坏。 – Hoody 2012-04-26 15:11:18

0

也许它会工作:

Car car = db.Cars.Where(x => x.CarId == "CAR01").FirstOrDefault(); 
Model model = db.Models.Single(c => c.ModelId == "MODEL88"); 
car.ModelId = model.Id; 
db.SubmitChanges(); 
+0

这将返回操作无效由于对象的当前状态。 – Hoody 2012-04-25 10:47:19