次のスクリプトを実行すると、次のエラーが発生します。エラーの内容と解決方法を教えてください。
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
エラー:
サーバー: メッセージ 544、レベル 16、状態 1、行 1
IDENTITY_INSERT が OFF に設定されている場合、テーブル 'table' の ID 列に明示的な値を挿入できません。
次のスクリプトを実行すると、次のエラーが発生します。エラーの内容と解決方法を教えてください。
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
エラー:
サーバー: メッセージ 544、レベル 16、状態 1、行 1
IDENTITY_INSERT が OFF に設定されている場合、テーブル 'table' の ID 列に明示的な値を挿入できません。
SQLサーバーでこのエラーが発生した場合は、次のクエリを実行してください-
SET IDENTITY_INSERT tableName ON
これは、データベースの単一のテーブルに対してのみ機能します。
たとえば、テーブル名が次の場合、student
クエリは次のようになります。
SET IDENTITY_INSERT student ON
Web アプリケーションでこのエラーが発生した場合、またはエンティティ フレームワークを使用している場合は、まず SQL サーバーでこのクエリを実行し、エンティティ モデルを更新して (
.edmx file
) 、プロジェクト をビルドすると、このエラーが解決されます。
IDENTITY_INSERT を ON に設定することには十分注意してください。データベースがメンテナンス モードでシングル ユーザーに設定されていない限り、これはお勧めできません。これは、挿入だけでなく、テーブルにアクセスしようとしている他のユーザーの挿入にも影響します。
ID フィールドに値を入れようとしているのはなぜですか?
そのテーブルのエンティティで、DatabaseGenerated
ID 挿入が設定されている列の上に属性を追加します。
例:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TaskId { get; set; }
エラーなしでレコードを挿入するには、基本的に 2 つの方法があります。
1) IDENTITY_INSERT が OFF に設定されている場合。主キー「ID」は存在してはなりません
2) IDENTITY_INSERT が ON に設定されている場合。主キー「ID」が存在する必要があります
IDENTITY PRIMARY KEY で作成された同じテーブルからの次の例に従って:
CREATE TABLE [dbo].[Persons] (
ID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(40) NOT NULL,
FirstName VARCHAR(40)
);
1) 最初の例では、IDENTITY_INSERT が OFF の場合、エラーを発生させずに新しいレコードをテーブルに挿入できます。PRIMARY KEY "ID"は "INSERT INTO" ステートメントから存在してはなりません。一意の ID 値が自動的に追加されます: . この場合、ID が INSERT から存在する場合、「表の識別列に明示的な値を挿入できません...」というエラーが表示されます。
SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE');
INSERT INTO Persons (FirstName,LastName)
VALUES ('JOE','BROWN');
TABLE [dbo].[Persons] の出力は次のようになります。
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
2) 2 番目の例では、IDENTITY_INSERT が ON の場合、エラーを発生させることなくテーブルに新しいレコードを挿入できます。ID 値がまだ存在しない限り、主キー「ID」は「INSERT INTO」ステートメントから存在する必要があります。この場合、ID が INSERT から存在しない場合、「明示的な値が必要です。 ID 列テーブルに指定されています..."
SET IDENTITY_INSERT [dbo].[Persons] ON;
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (5,'JOHN','WHITE');
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (3,'JACK','BLACK');
TABLE [dbo].[Persons] の出力は次のようになります。
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
3 BLACK JACK
5 WHITE JOHN
liquibase を使用して SQL Server を更新している場合、レコード キーを autoIncrement フィールドに挿入しようとしている可能性があります。挿入から列を削除すると、スクリプトが実行されます。
<changeSet id="CREATE_GROUP_TABLE" >
<createTable tableName="GROUP_D">
<column name="GROUP_ID" type="INTEGER" autoIncrement="true">
<constraints primaryKey="true"/>
</column>
</createTable>
</changeSet>
<changeSet id="INSERT_UNKNOWN_GROUP" >
<insert tableName="GROUP_D">
<column name="GROUP_ID" valueNumeric="-1"/>
...
</insert>
</changeSet>
誰もが SQL についてコメントしていますが、EntityFramework では何が起こったのでしょうか? 私は投稿全体を読んで過ごしましたが、誰もEFを解決しませんでした。したがって、数日後に解決策が見つかりました: コンテキスト内の EF Core モデルを作成するには、次のような指示があります。 modelBuilder.Entity<Cliente>(entity => { entity.Property(e => e.Id).ValueGeneratedNever();
これもエラーを生成します。解決策: ValueGeneratedOnAdd() とその動作によって変更する必要があります!
クエリには事前に言及された OperationId がありますが、これは自動的にインクリメントされるため、そこにあるべきではありません
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
あなたのクエリは
Insert table(OpDescription,FilterID)
values ('Hierachy Update',1)
もう 1 つの状況は、主キーがクラスと同じ名前であることを確認することです。唯一の違いは、主キーに「ID」が追加されているか、主キーに [Key] を指定することです。クラスに名前が付けられます。
すべてが正しい場合でも、Identity 列のデータ型が int または long でない場合、このエラーが表示されることがあります。私はint値しか保存していませんでしたが(私の悪い)、ID列を10進数として持っていました。データベースと基になるモデルの両方でデータ型を変更すると、問題が修正されました。
「テーブルの挿入」の用途はわかりませんが、いくつかの値を挿入しようとしているだけの場合は、次を試してください。
Insert Into [tablename] (OpDescription,FilterID)
values ('Hierachy Update',1);
同じエラー メッセージが表示されましたが、これで問題ないと思います。ID は、主キーである限り、自動的にインクリメントされます。
また、Oracle SQL Developer を使用して接続している場合は、忘れずに / sqldev:stmt /を追加してください。
/ sqldev:stmt / ID_INSERT TABLE をオンに設定します。
.dbml ファイルにドラッグされたテーブルを削除して、再度ドラッグするだけです。次に、ソリューションのクリーン>ソリューションの再構築>ソリューションの構築。
それが私のために働いたものです。
私は自分でテーブルを作成しませんでした。VS と SSMS を使用していました。ASP.NET Identity の次のリンクをたどりました: https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/空または既存の Web フォーム プロジェクトに aspnet-identity を追加する
インターフェイスを使用し、savechanges のメソッドを一般的な方法で実装する場合に、型指定されていない DBContext または DBSet を使用すると発生する問題
これがあなたの場合であれば、たとえば強く型付けされた DBContex を提案します
MyDBContext.MyEntity.Add(mynewObject)
それから.Savechanges
動作します