Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在EF 6-中创建记录时出错;无法为表“中的标识列插入显式值”;照片;当标识“插入”设置为“关闭”时;_Asp.net_Asp.net Mvc_Entity Framework_Asp.net Mvc 5_Entity Framework 6 - Fatal编程技术网

Asp.net 在EF 6-中创建记录时出错;无法为表“中的标识列插入显式值”;照片;当标识“插入”设置为“关闭”时;

Asp.net 在EF 6-中创建记录时出错;无法为表“中的标识列插入显式值”;照片;当标识“插入”设置为“关闭”时;,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-5,entity-framework-6,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Entity Framework 6,我最近将我的应用程序从ASP.NET MVC 3和EF 4升级到ASP.NET MVC 5和EF 6。我有几个用于CRUD功能的存储库函数 我没有更改任何内容,但如果我尝试向实体添加记录,我会突然收到此错误: 当identity\u insert设置为OFF时,无法在表“Photos”中插入identity列的显式值 下面是其中一种方法的示例 public void SavePhoto(Photo photo) { if (photo.PhotoID == 0)

我最近将我的应用程序从ASP.NET MVC 3和EF 4升级到ASP.NET MVC 5和EF 6。我有几个用于CRUD功能的存储库函数

我没有更改任何内容,但如果我尝试向实体添加记录,我会突然收到此错误:

当identity\u insert设置为OFF时,无法在表“Photos”中插入identity列的显式值

下面是其中一种方法的示例

 public void SavePhoto(Photo photo)
 {
        if (photo.PhotoID == 0)             // new photo
            _entities.Photos.Add(photo);
        else                                // edit photo
        {
            _entities.Photos.Attach(photo);
            _entities.Entry(photo).State = EntityState.Modified;               
        }

        _entities.SaveChanges();
  }
我的数据库中此表的
PhotoID
列被设置为标识。当这之前起作用时,它只会根据最后一个条目(如预期)增加
PhotoID
列值

现在使用EF 6有更好的方法吗?

您的PhotoId列是否为“int”类型并用“DateGenerated identity”注释?如果是这样,以下代码将出错。因为EF可能认为您正在将0插入标识列

if (photo.PhotoID == 0)             // new photo
            _entities.Photos.Add(photo);
使用id==0检查它是否是一张新照片不是一个好的做法,实际上这是一个“错误”,因为假设系统中有3条记录(默认值可能意味着你的photoid不大于4),不知何故你的photoid在后端被操纵为100,现在当你的代码运行时,你的代码将其状态设置为修改。EF可能会为您抛出错误,或者EF可能会尝试为您插入错误,而不是进行编辑

所以我建议使用下面的代码

  var photo = _entities.Photos.Find(photo.PhotoId)
if (photo == null) {
//your code to add photo
}
else
{
//your code to set the the modal state to modified. 
}

这似乎没有错。我已经在我的repository类上查看了Add、Update和AddOrUpdate方法,它们基本上做了相同的事情。唯一的区别是我没有检查ID=0,而是使用类似if(_entitites.Photos.Contains(photo))Update(photo)的东西;您是否尝试过以下任何一种方法:查看照片实体的其他导航模型。我曾经遇到一个实体的问题,结果是它的导航属性有问题。