使用Moq,NUnit和实体框架重新加载保存的实体

太平

我有一个单元测试(使用NUnit),并且试图在Entity Framework 6中模拟一个add操作。在add操作中,我添加了一个新的person实体并重新加载它,以便可以返回新创建的id。我遇到的问题是当我想重新加载实体时,出现错误“自创建数据库以来,支持上下文的模型已更改”。当我将其应用于模拟场景时,我在Google上检查过的所有答案都没有任何解决方案。

[Test]
[Description("Add")]
public void Add()
{
    var person = new Person
    {
        FirstName = "John",
        LastName = "Doe",
        Dob = new DateTime(1984, 8, 23),
        Ssn = "555-55-5555"
    };

    var mockDbSet = new Mock<DbSet<Person>>();
    mockDbSet.Setup(s => s.Create()).Returns(new Person());

    var mockContext = new Mock<PersonContext>();
    mockContext.Setup(c => c.People).Returns(mockDbSet.Object);

    context.Object.People.Add(person);
    context.Object.SaveChanges();

    // This code will throw an error.
    //context.Object.Entry(person).Reload();

    mockDbSet.Verify(m => m.Add(It.IsAny<Person>()), Times.Once());
    mockContext.Verify(m => m.SaveChanges(), Times.Once());

    // To do: Test that the id was populated from the reload operation.
}

我该怎么做才能重新加载实体并获取新的ID?

太平

我发现我使用的是EF 5中的旧代码。我更新了此答案,以同时包含这两种方法。

// This is how to return a newly inserted id from EF 6.
public int AddMyEntity(MyEntity myEntity)
{
    dbContext.MyEntities.Add(myEntity);
    context.SaveChanges();
    return myEntity.Id; 
}

// This is how to return a newly inserted id from EF 5.
public int AddMyEntity(MyEntity myEntity)
{
    dbContext.MyEntities.Add(myEntity);
    dbContext.SaveChanges();
    dbContext.Entry(myEntity).Reload();
    return myEntity.Id; 
}   

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Moq,NUnit和实体框架重新加载保存的实体

来自分类Dev

使用实体框架保存大型实体和子实体

来自分类Dev

使用实体框架保存大型实体和子实体

来自分类Dev

Moq测试实体框架

来自分类Dev

实体框架从上下文重新加载实体

来自分类Dev

实体框架加载相关实体

来自分类Dev

实体框架加载相关实体

来自分类Dev

实体框架急切和延迟加载

来自分类Dev

实体框架急切和延迟加载

来自分类Dev

我可以在实体框架中重新调用和更新尚未保存到数据库的已添加实体吗?

来自分类Dev

渴望加载实体框架

来自分类Dev

使用AsNoTracking()的实体框架延迟加载

来自分类Dev

实体框架使用HasOptional加载外键

来自分类Dev

使用实体框架的可能的延迟加载条件

来自分类Dev

LINQ使用实体框架进行快速加载

来自分类Dev

使用实体框架保存AutoMapper映射的实体集合

来自分类Dev

实体框架保存更改

来自分类Dev

使用实体框架保存推文

来自分类Dev

使用实体框架保存推文

来自分类Dev

使用实体框架保存组合框值

来自分类Dev

实体框架5.0上下文重新加载

来自分类Dev

使用linq和相关实体查询实体框架7

来自分类Dev

实体框架6,加载实体异步/等待

来自分类Dev

实体框架仅加载父实体

来自分类Dev

实体框架6,加载实体异步/等待

来自分类Dev

实体框架未正确加载子实体

来自分类Dev

实体框架实体加载如何工作?

来自分类Dev

结合使用MariaDB和实体框架

来自分类Dev

使用实体框架6和SQLite的问题