【问题标题】:Can't save changes on INSERTed records无法保存对 INSERTed 记录的更改
【发布时间】:2019-04-25 08:07:29
【问题描述】:

我有一个实体框架应用程序,它有一个从数据库生成的模型(数据库优先方法)。

我的函数将新记录添加到DbSet。将它们全部添加后,我试图通过db.SaveChanges() 将更改保存到数据库中的表中。相同的函数用于数据库中的所有表。它们都具有相同的格式:

CREATE TABLE [dbo].[Table1](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Column1] [nvarchar](200) NULL,
    [Column2] [nvarchar](200) NULL,
    [Column3] [decimal](20, 10) NULL,
    [cs_Table1]  AS (checksum([Column1],[Column2])),
PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

有些表有更多或更少的列。问题是导入新记录适用于大多数表,但对于其中两个则不起作用。我已经检查过很多次了。它们没有任何显着差异。当我尝试在这两个表上保存更改时,我没有得到它执行的错误。我已经对其进行了调试,它正确地传递了新实例,但在 db.SaveChanges() 上它什么也没做。

我在其他帖子中读到,有时您拥有某种数据库副本,并且它会复制到那里。我怎样才能检查这个?以及为什么它在某些桌子上有效而在某些桌子上无效。是同一个数据库。

我保存更改的片段:

using (FileStream stream = File.Open(excel, FileMode.Open))
{
    My_Model db = new My_Model ();
    var class = new ExcelExtractingClass(db);
    class.ImportFromExcel(stream);
    db.SaveChanges();
}

ImportFromExcel 是一个长函数。但我确信它有效。它对我的问题所做的只是使用:DbSet.Add(entity)。但它适用于大多数表。 DbSet 在My_Model 中定义,它是从数据库生成的。

【问题讨论】:

  • 添加/更新的 C# 代码在哪里。
  • 这是基本的Add 方法,没有更新。 db.DbSet.Add(record) 函数没有问题,因为它适用于所有表。我没有错误。只是没有为数据库中的这两个表保存。
  • 在保存之前,您必须添加您的实体,如下所示:dbset.Add(entity); dataContext.Entry(entity).State = EntityState.Added; dataContext.SaveChanges();
  • dbIDbSets 组成,并且没有 Entry() 方法。如果没有这种方法,它如何解释它在大多数情况下都有效?
  • 在没有看到代码的情况下,我怀疑任何人都可以告诉您可能缺少/错误的内容。您需要单步执行它,查看它在哪里创建实体,并将它们添加到 DbSet。代码要么没有按照您的预期将实体添加到 DbSet,要么存在正在吞噬问题证据的异常处理。

标签: sql-server asp.net-mvc entity-framework linq


【解决方案1】:

经过彻底调试后,我发现跳过Adding 新记录的逻辑对于这两个表无法正常工作。

【讨论】:

    猜你喜欢
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多