Database 试图保存到数据库时出现数据库错误InValidOperationException
我在尝试保存到数据库时遇到此错误。 在控制器中,我有编辑HttpPutDatabase 试图保存到数据库时出现数据库错误InValidOperationException,database,asp.net-mvc-3,entity-framework,Database,Asp.net Mvc 3,Entity Framework,我在尝试保存到数据库时遇到此错误。 在控制器中,我有编辑HttpPut public ActionResult EditSubject(Models.xxxx model) { //Database Model Class SubjectDB subjectdb = new SubjectDB(); // Name of DB Access in Web.config BeaconDBEntities db = new BeaconDBEntities
public ActionResult EditSubject(Models.xxxx model)
{
//Database Model Class
SubjectDB subjectdb = new SubjectDB();
// Name of DB Access in Web.config
BeaconDBEntities db = new BeaconDBEntities();
if (ModelState.IsValid)
{
subjectdb.SubjectId = model.SubjectId;
db.SubjectDBs.Add(subjectdb); --> Pops InvalidOperationsException
db.SaveChanges();
}
“模型”文件夹中是数据库表的模型
SubjectDB.cs
namespace xxx.Models
{
public class SubjectDB
{
public string SubjectId { get; set;}
}
public class BeaconDBEntities: DbContext
{
public DbSet<SubjectDB> SubjectDBs { get; set; }
}
}
namespace xxx.Models
{
公共类主题数据库
{
公共字符串主语{get;set;}
}
公共类Beacondities:DbContext
{
公共DbSet SubjectDBs{get;set;}
}
}
Web.config是数据库的连接字符串
<coneectionStrings>
<add name="BeaconDBEntities" ...............
</connectionStrings>
我看到的第一件事是,您的连接字符串名称“beacondbenties”与DbContext继承的类名“beacondbenties”不匹配(您在单词Entities中缺少一个“I”)。尝试更改它,看看它是否修复了它。当您编辑数据时,我认为您不需要编写这样的代码,当您使用的实体框架低于代码时
db.SubjecDBs.Add(subjectdb);
db.SaveChanges();
首先,当你更新你的数据,然后首先用你的id获取你的数据,如下所示
创建对象和实体类。实体类是如下表所示的表
SubjecDBs objsub=new SubjecDBs();
var data =db.db.SubjecDBs.where(x=>x.SubjectID==ID).ToList();
objsub.SubjecName=data[0].SubjecName
然后你匹配你的数据,这是你习惯于更新如下
SubjecDBs objsub=new SubjecDBs();
var data =db.db.SubjecDBs.where(x=>x.SubjectID==ID).ToList();
objsub.SubjecName=data[0].SubjecName
你匹配你不想更新的字段,然后写下面的代码如下
db.SaveChanges();
我想这会对你有所帮助…那是我的错别字。到目前为止,我唯一发现的是beacondbenties^:DbContext之间有一个空格。它应该是BeaconDBEntites:DbContext。但它仍然会弹出相同的错误。异常的消息是什么?它似乎成功地命中了SQL,因为您将得到一个不同的异常。您是否满足数据库中表的所有约束条件?我看到的另一件事是一条附加注释,它说“实体类型SubjectDB不是当前上下文的模型的一部分。您是否100%确定连接字符串是正确的。我们是否可以看到整个连接字符串(显然是X输出服务器信息和凭据!)。您是否将其放入了正确的web.config?MVC项目中有两个,一个在视图文件夹中,另一个在主项目目录中。连接字符串需要位于主目录的web.config中。此外,您从何处获取连接字符串?如果您直接从“.edmx”文件复制它,通常会导致问题。另外,您是否如果您在不同的项目中有模型类,那么您是否引用了相同版本的EF版本?另外,您是否曾经修复过web.config中“BeaconDBEntites”缺少的“i”类型(来自我的原始答案)?我尝试了您的方法,在这里得到了相同的错误--var data=db.SubjectDBs.where(x=>x.SubjectId==model.Id)。ToList();您不需要编写model.id public ActionResult EditSubject(int id){}这是您的操作,您需要编写var data=db.SubjectDBs.where(x=>x.SubjectId==id).ToList();