2016-08-30 8 views
0

私は、Entity Framework Core経由でPostgreSQLデータベースとやり取りするいくつかのREST Webサービスを実装するASP.NET Core 1.0 Webアプリケーションを用意しています。私のモデルではEntity Framework IDカラム負の値

、私は次のパターンを使用し、コード最初のエンティティクラスのさまざまなを持っている:

[Key] 
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
public int Id { get; set; } 

明らかにこれは、データベース内の自動インクリメントのユニークキーID列に対応しています。

困ったことに、間違いなくどこかの欠陥によって、私がまだ理解していない理由から、IDの値が非常に大きな負の整数であるということです。

-2147482645 

通常、彼らはそれを引き起こしている可能性がどのような1

から始まる整数値を昇順うまく行儀ていますか?

+0

誰かが手動でそのような番号を挿入するのを防ぐものはありません。 –

+0

PostgreSQLの私の__very__の理解は、自動インクリメントデータ型が 'serial'または' bigserial'と呼ばれています。おそらく、マイグレーションが何を生成しているのかを確認し、必要でない場合は、 'Column'属性を使用して優先データ型を指定してください。ちなみに、使用している現在の属性は余分です。キープロパティは規約に従います。 –

+0

@a_horse_with_no_nameはい、私はそれをしていません。私はEFにインサートの完全なコントロールをさせています。 – robbpriestley

答えて

0

この問題は、Add()の呼び出しで挿入される前にエンティティでUpdate()を呼び出すことと関係があることが判明しました。当然、Update()を挿入されていないエンティティに呼び出すと、例外がスローされます。しかし、例外をキャッチしてエンティティを追加する必要があるというフラグとして使用することはオプションではないようです。そうすることによって、一貫して負のId値が後続の挿入に使用されるためです。解決策は、エンティティがまだ存在していないという別の手段を使用して検出し、Update()をデフォルトアクションとして使用するのではなく、Add()を適切に挿入して挿入することでした。

関連する問題