0

2 つのテーブル間に 1 対多の関係があり (ユーザーは複数のアルバムを持つことができます)、アルバム テーブルにも他のテーブルとの関係があります。問題は、アルバムを保存したいときに FOREIGN KEY 制約の例外が発生することですが、ユーザーは存在し、外部キーが指定されています。

例外は次のとおりです。

INSERT ステートメントが FOREIGN KEY 制約 "FK_Albums_CreatedBy" と競合しました。
データベース「{Database Name}」、テーブル「dbo.Users」、列「Id」で競合が発生しました。
ステートメントは終了されました。

これは、アルバム クラスのコンストラクター内のアルバムとユーザーのマッピング コードです。

this.HasRequired(t => t.CreatedBy)
            .WithMany(t => t.Albums)
            .HasForeignKey(d => d.CreatedById);

これは保存コードです:

private void InsertAlbum(MyContext context, Album album)
{
    album.Guid = Guid.NewGuid();
    album.CreatedDateTime = DateTime.Now;
    album.CreatedBy = context.Users.Single(u => u.UserName == "SomeUser"); // User exists and has Id = 1
    album.RowVersion = Guid.NewGuid();

    // Assigning other relations...

    context.Albums.Add(album);
    context.SaveChanges(); // This is the place that the exception occurs.
}

アップデート

Albums テーブルには Metadatas テーブルとの別の 1 対多の関係があり、アルバムにメタデータを挿入しないと例外が発生しないため、エラーが実際には間違っていることがわかりました。エラーの原因と、間違ったエラーが表示される理由がわかりません。

4

1 に答える 1

0

user idではなく、 user nameに設定CreatedByしているようです。次のようなことを試してください:

album.CreatedBy = context.Users.Single(u.id)

(申し訳ありませんが、ここで正しい構文はわかりませんが、概念は正しいはずです)

于 2012-12-25T11:46:29.677 に答える