Database 试图保存到数据库时出现数据库错误InValidOperationException

Database 试图保存到数据库时出现数据库错误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

我在尝试保存到数据库时遇到此错误。 在控制器中,我有编辑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();


    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();