首页 > 解决方案 > INSERT 语句与 FOREIGN KEY 约束“tblFavoriteTeam_LoginId”冲突

问题描述

我收到这个错误。我能够发布默认数据但无法通过单元测试。你能帮我么?

System.Data.SqlClient.SqlException:INSERT 语句与 FOREIGN KEY 约束“tblFavoriteTeam_LoginId”冲突。冲突发生在数据库“TeamJazz.DB”、表“dbo.tblLogin”、列“Id”中。

我的单元测试代码:

[TestMethod]
public void InsertTest()
{
        using (GameEntities dc = new GameEntities())
        {
            tblFavoriteTeam newrow = new tblFavoriteTeam();
            newrow.Id = Guid.NewGuid();
            newrow.FavTeamId = Guid.NewGuid();
            newrow.LoginId = Guid.NewGuid();

            dc.tblFavoriteTeams.Add(newrow);
            int result = dc.SaveChanges();

            Assert.IsTrue(result > 0);
        }
}

我的默认数据:

BEGIN
    DECLARE @LoginId uniqueidentifier;
    DECLARE @FavTeamId uniqueidentifier;

    SELECT @LoginId = Id FROM tblLogin WHERE Email = 'test@gmail.com'
    SELECT @FavTeamId = Id FROM tblTeam WHERE TeamName = 'Packers'

    INSERT INTO tblFavoriteTeam (Id, FavTeamId, LoginId)
    VALUES (NEWID(), @FavTeamId, @LoginId)

    SELECT @LoginId = Id FROM tblLogin WHERE Email = 'test2@gmail.com'
    SELECT @FavTeamId = Id FROM tblTeam WHERE TeamName = 'Cowboys'

    INSERT INTO tblFavoriteTeam (Id, FavTeamId, LoginId)
    VALUES (NEWID(), @FavTeamId, @LoginId)

    SELECT @LoginId = Id FROM tblLogin WHERE Email = 'test3@gmail.com'
    SELECT @FavTeamId = Id FROM tblTeam WHERE TeamName = 'Lions'

    INSERT INTO tblFavoriteTeam (Id, FavTeamId, LoginId)
    VALUES (NEWID(), @FavTeamId, @LoginId)
END

这是FavoriteTeam表内的数据,因此您知道发布的默认数据:

在此处输入图像描述

这是edmx:

在此处输入图像描述

标签: c#sql-server

解决方案


这是因为tblFavoriteTeams.LoginId是外键。它需要存在于tblLogin. 您的单元测试需要使用现有的LoginId. 您是否有可以获取LoginId而不是创建新 GUID 的测试帐户?

你可以这样做:

[TestMethod]
public void InsertTest()
{
    using (GameEntities dc = new GameEntities())
    {
        var login = dc.tblLogin.FirstOrDefault(x => x.LoginId == yourTestUsers.UserId);
        tblFavoriteTeam newrow = new tblFavoriteTeam();
        newrow.Id = Guid.NewGuid();
        newrow.FavTeamId = Guid.NewGuid();
        newrow.LoginId = login.LoginId();

        dc.tblFavoriteTeams.Add(newrow);
        int result = dc.SaveChanges();

        Assert.IsTrue(result > 0);
    }
}

推荐阅读