2012-04-25 58 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