2016-08-03 32 views
0

非常に長い時間、問題が発生しています。Microsoft.EntityFrameworkCore.dllで 'Microsoft.EntityFrameworkCore.DbUpdateException'タイプの例外が発生しました

public class Coordinate { 

    public int id {get;set;} 
    public int x {get;set;} 
    public int y {get;set;} 
} 
public class Planet { 

    public int id {get;set;} 
    public string name {get;set;} 
    public Coordinate coordinate {get;set;} 
} 

私は2つのモデルを作成しました。モデルPlanetは、モデルCoordinateを属性として持っています。 コードのどこかで座標を1つ作成し、それをデータベースに保存します。これは想像 座標:

Coordinate c = new Coordinate(); 
c.x = 1; 
c.y = 2; 

は、その後、私は私のデータベースに追加し、それが保存されます。

しかし、私は惑星を作成し、私は:

planet.coordinate = c; 

そして私は、私は次のエラーを持ってそれをデータベースに追加しよう:

An exception of type 'Microsoft.EntityFrameworkCore.DbUpdateException' occurred in Microsoft.EntityFrameworkCore.dll but was not handled in user code

Additional information: An error occurred while updating the entries. See the inner exception for details.

私は属性を変更することができます知っていますpublic Coordinate coordinatepublic int coordinate_idですが、代わりにCoordinateモデルでこれを実行します。

私はあなたの間違っているもので、より詳細な一見を与える内部例外を見て持つASP NET CORE 1.0

Cumps

+0

は、(例えば、追加したばかりしかしで、惑星を追加するには、リレーションシップ・フィックスアップは同じ結果につながるはず座標)「詳細については、内部例外を参照してください。」それは何を言うのですか? – DavidG

答えて

1

あなたの問題は、この時点で、cにはすでにIdがあることです。

planet.Addを使用すると、惑星とそれに付随するすべての座標がDbSetのAddに設定され、SaveChangesを呼び出すと、insertステートメントが作成されます。

SaveChangesが完了すると、EFは惑星がデータベース内にあるが、追加されたばかりの座標のIDが異なることを確認します(これはDBMSによって変更されています)だから座標はデータベース内で2回あり、異なる2つのIDで)、何かが間違っていてこの例外がスローされることが予想されます。

あなたが重複したエントリに問題を持っていない、そうでない場合はnullまたは0にIDを設定し、2つのソリューションがあります:のみFKプロパティ

-Set、ないナビゲーションプロパティ

は、または

-CallのSaveChanges一度だけ

+0

私はちょうど気付いた:cのEntityStateをEntityState.Modifiedに設定することで3番目の解決策があります。 – DevilSuichiro

+0

私は3番目の解決策が好きなので、惑星を追加するときは "context.Entry(planet.coordinate).State = EntityState.Modified? –

+0

yesですが、これについて考えると、DbUpdateConcurrencyExceptionと重複するエントリ私はDbUpdateExceptionをスローするコードに別のエラーがあると思いますが、InnerExceptionを見てください。 – DevilSuichiro

0

を使用しています。

これを行うには、デバッグモードで、例外が表示されます。詳細の表示をクリックし、内部の例外が見つかるまでツリーに従います。

重複する行、主キーの問題または構造の問題が存在する可能性があります。

+0

これは質問に答えるものではなく、デバッグのアドバイスしか提供しません。 – DavidG

+0

私はDavidを理解していますが、担当者は少ないです。コメントできません...どうすればいいですか? – mt025

+0

[50レースを獲得](http://stackoverflow.com/help/whats-reputation)、時間がかかりません。あなたは質問の編集を提案することでそれを行うことができます。多くの人が書式設定のヘルプを必要としています。 – DavidG

関連する問題