【发布时间】:2015-04-27 09:01:29
【问题描述】:
我无法在下面定义的表中插入一行。我必须符合表的复合主键。使用 Entity Framework 向表中插入单行时,我得到了 DbUpdateConcurrencyException。深入挖掘异常,我看到“OriginalValues 不能用于处于已添加状态的实体。”
- 我先运行 EF 6.1.3 数据库
- 我的数据库是 SQl 2008,设置 在兼容模式 2005 中。
下面是我添加行和表模式的代码。
c#代码:
Entities.Entry(new jotch_krdtrans() {Kred = 1, Regdato = DateTime.Now}).State = EntityState.Added;
Entities.SaveChanges();
SQL 表架构:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[jotch_krdtrans](
[Kred] [decimal](12, 0) NOT NULL,
[Regdato] [datetime] NOT NULL,
[Autonum] [decimal](18, 0) IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_jotch_krdtrans] PRIMARY KEY CLUSTERED
(
[Kred] ASC,
[Regdato] ASC,
[Autonum] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
我尝试在我的 edmx 文件中将 ProviderManifestToken 设置为“2005”,这似乎可以正常工作。但是,我希望更详细地解释为什么这使它起作用。就我的插入示例而言,2005 年到 2008 年之间发生了什么变化?我希望有更深入的了解。
提前致谢。
【问题讨论】:
标签: sql-server entity-framework sql-server-2008 sql-server-2005