如何在一个表中找到特定的实体与自动增量键?(实体框架)
本文关键字:实体 框架 一个 | 更新日期: 2023-09-27 18:03:59
我有以下测试方法:
[Test]
public void GetUserTest()
{
//Arrange
User user = new User();
user.Name = "someName";
user.BirthDate = DateTime.Now;
_dataContext.Users.Add(user);
_dataContext.SaveChanges();
//Execute
user = _dbService.GetUser(???);
//Assert
Assert.NotNull(user);
}
ID是自动生成的用户对象,所以我应该如何得到这个特殊的?在GetUser()后面,我使用了DbSet类中的Find(id)方法。
当EF插入具有数据库生成Id的记录时,它将把新的Id值读入保存的实体中。所以你可以简单地输入:
user = _dbService.GetUser(user.Id);
但是我对测试方法本身有一些评论。
目前,您在
_dataContext
实例中创建一个用户,该用户也在dbService
实例中使用。必须确保这些实例对于每个测试都是新的。否则,测试将影响其他测试,测试结果将变得不可预测。同样,对于测试的Arrange/Act/Assert部分,您应该使用服务/上下文的新实例。在当前的测试中,您创建了一个用户,并在Act(执行)部分中从上下文中检索该用户(因为它使用了
Find
)。实际上,您将创建一个服务(和上下文)并从数据库获取用户,因为Find
不会在上下文的缓存中找到它。