簡體   English   中英

實體框架6無法插入記錄

[英]entity framework 6 can't insert record

如果我定義一個序列和一個像這樣的表:

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();
}

我設置StoreGeneratedPatternIdentityiden列,它不表現為它應該由異常拋出SaveChangesDbUpdateConcurrencyException

存儲更新,插入或刪除語句影響了意外的行數(0)。 自加載實體以來,實體可能已被修改或刪除。 刷新ObjectStateManager條目。

我究竟做錯了什么?

生成的testTab:

<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>

我會檢查這些東西

  1. 確保已設置testTabs類的[Key]

  2. 確保您沒有同時擁有兩個不同的ABEntities2 (DbContext)實例

看起來唯一的問題是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一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM