2

Entity Framework を使用してデータベースにエンティティを挿入しようとしています。下記参照:

private void InsertarIntoDataBase()
{

    Juego game = db.games.First(g => g.Id == anId);
    Day d = new Day {
                       DayNumber = this.Number,
                       Game = game // This is a relationship. One Day has one game 
                    };
    db.AddToDay(d);
    db.SaveChanges();
}

これは、更新ではなく常に挿入用です。アプリを初めて実行すると動作しますが、その後動作を停止し、この例外がスローされますAn error occurred while updating the entries. See the InnerException for details.。(私は何も変えていないことを本当に確信しています)。

フレームワークが私が更新していると考えるのはなぜですか? そして、私は何が間違っていますか?

4

4 に答える 4

4

これは、更新を行っているという意味ではなく、単に SQL エラーが発生したという意味です。実際のエラーが何であるかを調べるには、内部例外を読む必要があります。見た目からすると、主キーまたは外部キー制約に関連するものである可能性があります。項目を追加しようとしており、その主キーは既にテーブルに存在します。しかし、ここでも、実際のエラーから詳細が得られます。

Visual Studio で実行している場合は、例外で自動的に中断し、内部の例外プロパティを展開できます。そうでない場合は、try/catch ブロックを配置して、ファイルにログを記録するか、コンソールに書き込むことができます。Exception.ToString() はすべての内部例外も表示します。これは、SQL エラーがいくつかの異なる例外内に真のエラーをラップする傾向があるためです。

private void InsertarIntoDataBase()
{
    try 
    {
        Juego game = db.games.First(g => g.Id == anId);
        Day d = new Day {
                           DayNumber = this.Number,
                           Game = game // This is a relationship. One Day has one game 
                        };
        db.AddToDay(d);
        db.SaveChanges();
    }
    catch (Exception e)
    {
        Console.WriteLine(e); // or log to file, etc.
        throw; // re-throw the exception if you want it to continue up the stack
    }
}
于 2013-01-05T00:24:06.427 に答える
0

Despertar の回答に基づいて、問題を解決できました。Entity Framework には というオプションがありますStoreGeneratedPattern。このオプションは、主キー ID を設定する必要がある場合の動作を示します。デフォルトでは、このオプションは "None" であるため、自動インクリメントが必要な場合は、オプションStoreGeneratedPatternを "Identity" に設定します。これは私が読んだリンクです。

于 2013-01-06T18:10:02.577 に答える