【发布时间】: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();
-
db由IDbSets组成,并且没有Entry()方法。如果没有这种方法,它如何解释它在大多数情况下都有效? -
在没有看到代码的情况下,我怀疑任何人都可以告诉您可能缺少/错误的内容。您需要单步执行它,查看它在哪里创建实体,并将它们添加到 DbSet。代码要么没有按照您的预期将实体添加到 DbSet,要么存在正在吞噬问题证据的异常处理。
标签: sql-server asp.net-mvc entity-framework linq