質問: 私は、Entity Frameworkコア経由でPostgreSQLデータベースとやりとりするいくつかのREST Webサービスを実装するASP.NET Core 1.0 Webアプリケーションを持っています。 私のモデルでは、次のパターンを利用するさまざまなコードファーストエンティティクラスがあります。 ``` [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int Id { get; set; } ``` 明らかに、これはデータベース内の自動インクリメントユニークキーID列に対応します。 問題は、間違いなくどこかで何らかの欠陥があることが原因で、時には私がまだ理解していない理由から、Idの値が非常に大きな負の整数であることです。 ``` -2147482645 ``` 通常は、1から始まる正則な昇順の整数値です。 それを引き起こす原因は何ですか?
回答: この問題は、 `Add()`呼び出しで挿入される前にエンティティの`Update()`を呼び出すことと関係していました。挿入されていないエンティティで`Update()`を呼び出すと、例外がスローされます。しかし、例外をキャッチしてエンティティを追加する必要があるというフラグとして使用することはオプションではないようです。そうすることによって、一貫して負のId値が後続の挿入に使用されるためです。解決策は、エンティティがまだ存在しないことを他の手段で検出し、 `Update()`をデフォルトアクションとして使用するのではなく、 `Add()`を適切に呼び出して挿入することでした。