c# - 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:
解决方案
这是因为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);
}
}
推荐阅读
- html - 我们可以在 CSS 上使用 HTML 标签吗?
- rdf - 如何设置关系的属性?
- r - 从类别混合的列中为每个类别构建单独的列
- android - 使用异步任务和线程池执行器
- python - 使用 Python 2.7 登录密码保护站点的问题
- ruby-on-rails - Rails 不会设置会话
- angular - 将 Angular 升级到最新版本时编译 webpack 的问题
- css - React Native:如何将文本“hello”移动到我的应用程序的右侧而不是中间?
- javascript - CSS 过渡悬停
- django-rest-framework - Djangorestframework - 创建一个基于卡片计算统计数据的 api