如何在一个表中找到特定的实体与自动增量键?(实体框架)

本文关键字:实体 框架 一个 | 更新日期: 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);

但是我对测试方法本身有一些评论。

  1. 目前,您在_dataContext实例中创建一个用户,该用户也在dbService实例中使用。必须确保这些实例对于每个测试都是新的。否则,测试将影响其他测试,测试结果将变得不可预测。

  2. 同样,对于测试的Arrange/Act/Assert部分,您应该使用服务/上下文的新实例。在当前的测试中,您创建了一个用户,并在Act(执行)部分中从上下文中检索该用户(因为它使用了Find)。实际上,您将创建一个服务(和上下文)并从数据库获取用户,因为Find不会在上下文的缓存中找到它。