实体框架6无法插入记录
Posted
技术标签:
【中文标题】实体框架6无法插入记录【英文标题】:entity framework 6 can't insert record 【发布时间】:2016-10-31 05:15:57 【问题描述】:如果我这样定义一个序列和一个表:
CREATE SEQUENCE [dbo].[seq-test]
AS [bigint]
START WITH 0
INCREMENT BY 1
MINVALUE -9223372036854775808
MAXVALUE 9223372036854775807
CACHE
GO
CREATE TABLE [dbo].[testTab]
(
[iden] [bigint] NOT NULL DEFAULT (NEXT VALUE FOR [seq-test]),
[name1] [nchar](10) NULL,
[name2] [nchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[iden] ASC
)
) ON [PRIMARY]
然后尝试使用 EF 6 插入数据:
testTab d = new testTab();
d.name1 = "sss";
using (var db = new ABEntities2())
db.testTabs.Add(d);
db.SaveChanges();
我将StoreGeneratedPattern
的iden
列设置为Identity
,它的行为不正常,SaveChanges
抛出的异常是DbUpdateConcurrencyException
:
存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体后,实体可能已被修改或删除。刷新 ObjectStateManager 条目。
我做错了什么?
生成的测试标签:
<EntitySetMapping Name="testTabs">
<EntityTypeMapping TypeName="ABModel.testTab">
<MappingFragment StoreEntitySet="testTab">
<ScalarProperty Name="iden" ColumnName="iden" />
<ScalarProperty Name="name1" ColumnName="name1" />
<ScalarProperty Name="name2" ColumnName="name2" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
【问题讨论】:
你能包含你的 testTabs 类吗? 我认为,您在创建时包含了不需要的括号。 ([识别] ASC)在[主要]上。有一个双重关闭。但一个开口 一对括号用于主键定义,另一个用于创建表——我修改缩进只是为了更好的可读性 【参考方案1】:我会检查这些东西
确保正在设置testTabs
类上的[Key]
确保您没有同时拥有两个不同的 ABEntities2 (DbContext)
实例
【讨论】:
它是自动设置的:<Key> <PropertyRef Name="iden" /> </Key>
【参考方案2】:
看起来唯一的问题是sequence
的使用,因为我将表定义更改为
CREATE TABLE [dbo].[testTab]
(
[iden] [bigint] identity(1,1) NOT NULL ,
[name1] [nchar](10) NULL,
[name2] [nchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[iden] ASC
)
) ON [PRIMARY]
所以我使用identity
而不是sequence
并重新创建了模型,一切正常。 sql2012 中引入的sequence
似乎无法正确使用 EF6。
【讨论】:
以上是关于实体框架6无法插入记录的主要内容,如果未能解决你的问题,请参考以下文章