2012-12-25 59 views
0

我在两个表之间有一对多的关系(一个用户可以有多个专辑),专辑表也和其他表有关系。 问题是,当我想保存一个专辑时,FOREIGN KEY约束将发生异常,但用户存在并指定了外键。FOREIGN KEY约束例外

这里的例外:

INSERT语句冲突与外键约束 “FK_Albums_CreatedBy”。
数据库“{数据库名称}”,表“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. 
} 

UPDATE

我发现错误是acctualy错误,因为白蛋白ums表与Metadatas表有着另一种一对多关系,如果我没有在专辑中插入任何元数据,我将不会收到任何异常。 现在我不确定什么会导致错误,为什么它会显示错误。

+0

你能张贴代码为实体和配置类? –

+0

我会启动数据库上的一个分析器来查看哪些SQL语句实际上正在执行。 –

+0

你建议使用哪种分析器? – mrtaikandi

回答

0

它看起来像你设置CreatedBy用户,而不是用户ID。尝试是这样的:

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

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

+0

这不是这样,因为context.Users.Single(u => u.UserName ==“SomeUser”);将返回用户的一个实例。 UserName在我的数据库中是唯一的。 – mrtaikandi