You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC视图数据存入数据库异常:图片保存报错

问题解决思路

你遇到的「Store update, insert, or delete statement affected an unexpected number of rows (0)」错误,核心原因是EF尝试操作的实体不存在,或被误当成更新操作而非新增。以下是具体排查和解决步骤:

1. 检查BLL层AddMovie方法的实现

确保方法逻辑是新增实体,而非更新。如果你的BLL代码是类似下面的错误写法,会把新的Movie对象当成已有实体去更新,从而触发错误:

// 错误写法:误用Update操作
public void AddMovie(Movie movie)
{
    dbContext.Movies.Update(movie);
    dbContext.SaveChanges();
}

需改为新增逻辑:

// 正确写法:执行新增操作
public void AddMovie(Movie movie)
{
    dbContext.Movies.Add(movie);
    dbContext.SaveChanges();
}

因为新创建的Movie还未生成主键值,用Update会让EF认为你要更新一个不存在的实体,最终抛出影响行数为0的错误。

2. 验证Movie实体的主键配置

如果Movie的主键是自增类型(比如int Id),必须确保实体类或Fluent API中配置了自增规则:

  • 实体类标记特性:
public class Movie
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    // 其他字段
    public byte[] Image { get; set; }
}
  • 或Fluent API配置:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Movie>()
        .Property(m => m.Id)
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}

若未开启自增,EF会要求手动赋值主键,否则插入时会因主键为空/重复失败,触发相同错误。

3. 优化控制器的图片处理代码(可选)

你原有的图片读取逻辑可以简化,无需判断MemoryStream类型,直接读取即可:

[HttpPost]
public ActionResult AddMovie(Movie movie, HttpPostedFileBase Image)
{
    if (Image != null && Image.ContentLength > 0)
    {
        using (var memoryStream = new MemoryStream())
        {
            Image.InputStream.CopyTo(memoryStream);
            movie.Image = memoryStream.ToArray();
        }
    }
    else
    {
        movie.Image = null;
    }

    if (ModelState.IsValid)
    {
        obllmovie.AddMovie(movie);
        return RedirectToAction("Index");
    }

    return View();
}

4. 检查视图与ModelState有效性

确保视图中没有意外给Movie的主键字段赋值(比如误加了绑定Id的隐藏域),同时确认其他必填字段都正确输入,保证ModelState.IsValid为true,否则新增逻辑不会执行。

内容的提问来源于stack exchange,提问作者StefanIulian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:33:23