2015-05-14 91 views
0

使用實體框架將數據添加到MVC 4.5上的數據庫。我正在使用下面的代碼向表中添加數據,候選人可能包含一個新行,不會添加整行。我想知道爲什麼這不起作用,我沒有得到編譯或運行時錯誤。實體框架不會向數據庫添加新行

var subject = db.subjects_tbl; 

var sub = subject.CreateObject(); 
sub.subject_title = model.subject_title; 
sub.language_Id = model.language_Id; 

db.subjects_tbl.Attach(sub); 

db.ObjectStateManager.ChangeObjectState(sub, EntityState.Added); 

db.SaveChanges(); 
+0

我重新措辭你的問題集中於實體框架,而不是MVC,這是你打算怎麼辦? – Matthew

+0

是啊,謝謝你的幫助 – user3636426

回答

3

你不需要Attach()ChangeObjectState(),但你確實需要Add()其DbSet的實體。

var sub = subject.CreateObject(); 
sub.subject_title = model.subject_title; 
sub.language_Id = model.language_Id; 

//db.subjects_tbl.Attach(sub); 
//db.ObjectStateManager.ChangeObjectState(sub, EntityState.Added); 
db.subjects_tbl.Add(sub); 

db.SaveChanges(); 

DbSet.Attach頁:

的SaveChanges因此不會嘗試,因爲它被認爲已經在那裏插入一個附加實體到數據庫中。你

+0

啥子是assebly參考使用 – user3636426

+0

不包含「添加」,沒有擴展方法「添加」接受一個類型的第一個參數定義的add方法可以找到(是否缺少使用指令或程序集引用?)。這是我得到的消息 – user3636426

+0

私人cisielearning實體db = new cisielearningEntities(); – user3636426

1

還可以更改主題,以創建,更新或使用DbContext刪除(您db對象,我猜)的EntryState

var subject = db.subjects_tbl; 

var sub = subject.CreateObject(); 
sub.subject_title = model.subject_title; 
sub.language_Id = model.language_Id; 

db.Entry(sub).State = EntityState.Added; 

db.SaveChanges(); 

MSDN欲瞭解更多詳情。

+0

做不包含'Entry'的定義,並且沒有可以找到接受第一個參數類型的擴展方法'Entry'(你是否缺少using指令或程序集引用?)。這是我得到任何想法爲什麼的錯誤。 – user3636426

+0

1.什麼類型的db對象? 2.你有使用'System.Data.Entity'嗎? –

相關問題