首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数据库中插入项: Store update、insert或delete语句影响了意外的行数(0)

在数据库中插入项: Store update、insert或delete语句影响了意外的行数(0)
EN

Stack Overflow用户
提问于 2021-01-14 21:13:08
回答 1查看 48关注 0票数 0

我试着编写一个简单的create-method,就像我多次构建一样,但这一次,我一次又一次地得到这个错误:

代码语言:javascript
运行
复制
Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=472540 for information on understanding and handling optimistic concurrency exceptions.

我还尝试了异常给出的链接中的推荐过程:

代码语言:javascript
运行
复制
            catch (DbUpdateConcurrencyException dbex)
            {
                dbex.Entries.Single().Reload();
            }

但随后发生了以下错误:

代码语言:javascript
运行
复制
Refresh cannot be used for entities in the Added state

可以理解的是,我调用了Add-Method,所以应该没有什么需要刷新的,对吧?

我在网上找到的大多数案例都是针对Update-method的,所以不是我想要的。

我也尝试过这种方法,但异常不是由错误触发的。catch (DbUpdatableDataRecord ex) { return Json(ex.DataRecordInfo,JsonRequestBehavior.AllowGet);}

型号:

代码语言:javascript
运行
复制
public class ForecastItem
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    [Required( ErrorMessage = "Bitte ein Datum auswählen." )]
    [Display( Name = "Datum" )]
    public DateTime Date { get; set; }

    [Required( ErrorMessage = "Bitte ein Projekt auswählen." )]
    [Display( Name = "Projekt-ID" )]
    public int ProjectId { get; set; }

    [Required( ErrorMessage = "Bitte einen Preis eingeben." )]
    [Display( Name = "Preis" )]
    public decimal Price { get; set; }

    [Required( ErrorMessage = "Bitte einen Tickettyp hinterlegen." )]
    [Display( Name = "Tickettyp" )]
    public string TicketType { get; set; }

    [Required( ErrorMessage = "Bitte einen Abrechnungstyp auswählen." )]
    [Display( Name = "Abrechnungstyp" )]
    public string AccountingType { get; set; }

    [Required(ErrorMessage = "Bitte ein Ziel-Projektvolumen angeben.")]
    [Display(Name = "Zielvolumen")]
    public int TargetVolume { get; set; }

    [Display(Name = "Projekt")]
    public virtual Project Project { get; set; }
}

方法:

代码语言:javascript
运行
复制
public JsonResult addForecastItem(string newDate, int newProjectId, int newForecastVolume, string newTicketType, string newCalcType, decimal newPrice)
    {
        ForecastItem fi = new ForecastItem
        {
            AccountingType = newCalcType,
            Date = DateTime.Now,
            Price = newPrice,
            ProjectId = newProjectId,
            TargetVolume = newForecastVolume,
            TicketType = newTicketType
        };

        if ( ModelState.IsValid)
        {
            try
            {
                db.ForecastItems.Add(fi);
                db.SaveChanges();
            }
            catch (Exception e)
            {
                return Json(e.Message, JsonRequestBehavior.AllowGet);
            }
        }

        return Json(fi, JsonRequestBehavior.AllowGet);
    }

我说错了吗?模型是有效的,数据库是从软件的其他部分插入的。

EN

回答 1

Stack Overflow用户

发布于 2021-01-15 01:03:36

哦,天哪,

错误是: ID没有自动递增。这个表是通过SQL (to prototype,不是prod)创建的,ID是一个普通的INT。

Key-Attribute是在创建类时添加的,但数据库不是新建的。

解决方案:

  1. Production,推荐:通过代码优先迁移- https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/migrations/

  1. 警告-将删除所有数据:当数据不相关时:删除数据库并让DbContext在StartUp

上构建数据库

  1. My Solution (无数据链接时):

alter table ForecastItems drop column ID -- drop Column ID alter table ForecastItems add ID INT IDENTITY(1,1) --使用` Autoincrement 创建列ID

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65719653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档