0

我在两个表之间有一对多的关系(一个用户可以有多个专辑),并且专辑表也与其他表有一些关系。问题是当我想保存专辑时,会发生 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 表有另一个一对多的关系,如果我没有在专辑中插入任何元数据,我将不会收到任何异常。现在我不确定是什么导致了错误以及为什么它显示了一个不正确的错误。

4

1 回答 1

0

看起来您正在设置CreatedBy为 user name,而不是 user id。尝试这样的事情:

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

(对不起,我不知道这里的语法正确,但概念应该是正确的)

于 2012-12-25T11:46:29.677 回答