2014-02-17 73 views
1

我是新來使用LINQ與實體我有以下,我試圖運行更新。LINQ到實體更新記錄

OEEPumaDBEntities PumaOEEModel = new OEEPumaDBEntities(); 
Parameter1 parameter = new Parameter1(); 
parameter.ProductionWarning = int.Parse(txtProductionWarning.Text); 
parameter.ProductionDistress = int.Parse(txtProductionDistress.Text); 
parameter.ShiftStart = cmbShiftStart.Text; 

try 
{ 
    PumaOEEModel.SaveChanges(); 

} 
catch 
{ 
    throw new Exception("Could not save changes."); 
} 

當我運行代碼時,它調試正常,並沒有發現任何錯誤。但是當我檢查SQL數據庫時,它沒有用新數據更新記錄。我已經改變了代碼,並可以添加新的行,但由於某種原因,我不能更新記錄。任何人都可以看到有關上述代碼的任何問題和建議如何我可以改變這一點?

回答

2

當你要插入一個新的實體,需要首先將其連接到數據庫上下文:

PumaOEEModel.Parameters.Add(parameter); 

如果要更新一個對象,你需要先找到它。 所以不是parameter = new Parameter()你加載:

var parameter = PumaOEEModel.Parameters.FirstOrDefault(p => p.ParameterId == 1); 

(假設你的PumaOEEModel是一個數據上下文。)

+1

也有不錯的方法'查找()'如果實體上下文 –

1

你需要調用之前,將您PumaOEEModel檢索一個實體,然後更新它的屬性PumaOEEModel.SaveChanges()。像下面這樣。順便說一句,你需要正確處理OEEPumaDBEntities與使用塊。

using (var PumaOEEModel = new OEEPumaDBEntities()) 
{ 
    Parameter1 parameter = PumaOEEModel.Parameters.Single(p => p.Id == 1); 

    parameter.ProductionWarning = int.Parse(txtProductionWarning.Text); 
    parameter.ProductionDistress = int.Parse(txtProductionDistress.Text); 
    parameter.ShiftStart = cmbShiftStart.Text; 

    try 
    { 
     PumaOEEModel.SaveChanges(); 

    } 
    catch 
    { 
     throw new Exception("Could not save changes."); 
    } 
} 
0

我假設你想更新Parameter1對象參數。 但是,在您的代碼中,您正在初始化新的Parameter1對象,而不是從SQL數據庫獲取要更新的對象。

+0

已經存在這種情況可能是一個註釋 – christiandev

+0

@christiandev不能「意見」,但,沒有足夠的代表,這將節省您的數據庫查詢;) –

+0

真? :)好的,在這種情況下我的不好......;) – christiandev

0
OEEPumaDBEntities PumaOEEModel = new OEEPumaDBEntities(); 
var parameter = PumaOEEModel.Parameters.Single(x => x.ID == myParameterId); 
parameter.ProductionWarning = int.Parse(txtProductionWarning.Text); 
parameter.ProductionDistress = int.Parse(txtProductionDistress.Text); 
parameter.ShiftStart = cmbShiftStart.Text; 
PumaOEEModel.SaveChanges(); 
0

它應該是這樣的:

OEEPumaDBEntities PumaOEEModel = new OEEPumaDBEntities(); 

    // id here is the id of the record you want to update 
    Parameter1 parameter = PumaOEEModel.Parameter1.Singl(p=>p.ID == id); 

    parameter.ProductionWarning = int.Parse(txtProductionWarning.Text); 
    parameter.ProductionDistress = int.Parse(txtProductionDistress.Text); 
    parameter.ShiftStart = cmbShiftStart.Text; 

    try 
    { 
     PumaOEEModel.SaveChanges(); 

    } 
    catch 
    { 
     throw new Exception("Could not save changes."); 
    } 
0

嘗試使用AddObject,如果它是一個新對象,例如...

PumaOEEModel.AddObject(parameter); 
PumaOEEModel.SaveChanges(); 

Attach如果它是一個更新

var parameter = context.PumaOEEModel.Find(PrimaryKey); 
//update parameter properties 
PumaOEEModel.Attach(parameter); 
PumaOEEModel.SaveChanges();