2015-05-14 92 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'吗? –

相关问题