设置添加DBSET实体FRAMAWORK的模拟函数以更改对象属性的谷?

发布于 2025-02-10 18:33:23 字数 49 浏览 2 评论 0原文

如果使用添加函数,则将更改元素的属性ID以从表格中更改为分配的值,该如何执行此操作?

if you use an add function, then the property id of the element to include will be changed for a value assign from the table, How can i to do this?.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

放飞的风筝 2025-02-17 18:33:23

第一的。创建一个定义操作的通用类:

public static Mock<DbSet<T>> SetupMockDbSet<T>(IList<T> dataToBeReturnedOnGet) where T : class
    {
        var mocks = dataToBeReturnedOnGet.AsQueryable();

        var mockSet = new Mock<DbSet<T>>();
        mockSet.As<IQueryable<T>>().Setup(m => m.Provider).Returns(new TestAsyncQueryProvider<T>(mocks.Provider));
        mockSet.As<IQueryable<T>>().Setup(m => m.Expression).Returns(mocks.Expression);
        mockSet.As<IQueryable<T>>().Setup(m => m.ElementType).Returns(mocks.ElementType);
        mockSet.As<IQueryable<T>>().Setup(m => m.GetEnumerator()).Returns(mocks.GetEnumerator());
        mockSet.Setup(d => d.Add(It.IsAny<T>())).Callback<T>((s) => ModifiedProcess(s));
        mockSet.As<IAsyncEnumerable<T>>()
            .Setup(x => x.GetAsyncEnumerator(It.IsAny<CancellationToken>()))
            .Returns(new TestAsyncEnumerator<T>(mocks.GetEnumerator()));

        return mockSet;
    }

函数添加使用回调,可以访问发送的参数,然后定义一个函数,该函数具有依赖对象发送的对象的过程

public static void ModifiedProcess<T>(T parameter) where T : class
    {
        if (parameter is ObjectDTO)
        {
            ObjectDTO obj2 = (ObjectDTO)Convert.ChangeType(parameter, typeof(ObjectDTO));
            obj2.Id = 5;
        }
    }

    

First. create a generic class that define the operations:

public static Mock<DbSet<T>> SetupMockDbSet<T>(IList<T> dataToBeReturnedOnGet) where T : class
    {
        var mocks = dataToBeReturnedOnGet.AsQueryable();

        var mockSet = new Mock<DbSet<T>>();
        mockSet.As<IQueryable<T>>().Setup(m => m.Provider).Returns(new TestAsyncQueryProvider<T>(mocks.Provider));
        mockSet.As<IQueryable<T>>().Setup(m => m.Expression).Returns(mocks.Expression);
        mockSet.As<IQueryable<T>>().Setup(m => m.ElementType).Returns(mocks.ElementType);
        mockSet.As<IQueryable<T>>().Setup(m => m.GetEnumerator()).Returns(mocks.GetEnumerator());
        mockSet.Setup(d => d.Add(It.IsAny<T>())).Callback<T>((s) => ModifiedProcess(s));
        mockSet.As<IAsyncEnumerable<T>>()
            .Setup(x => x.GetAsyncEnumerator(It.IsAny<CancellationToken>()))
            .Returns(new TestAsyncEnumerator<T>(mocks.GetEnumerator()));

        return mockSet;
    }

The function add use Callback, who can access to parameters sended, and after define a function who has a process that depend of the object sended

public static void ModifiedProcess<T>(T parameter) where T : class
    {
        if (parameter is ObjectDTO)
        {
            ObjectDTO obj2 = (ObjectDTO)Convert.ChangeType(parameter, typeof(ObjectDTO));
            obj2.Id = 5;
        }
    }

    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文