我有两个表之间的一对多关系(用户可以有多个专辑),专辑表也与其他表有一些关系。 问题是,当我想要保存相册时,会发生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表有另外一对多的关系,如果我没有插入任何元素与相册,我将不会收到任何异常。 现在我不确定会导致错误的原因以及为什么它会向我显示错误的错误。
答案 0 :(得分:0)
您似乎将CreatedBy
设置为用户名称,而不是用户 id 。尝试这样的事情:
album.CreatedBy = context.Users.Single(u.id)
(对不起,我在这里不知道正确的语法,但概念应该是正确的)