Breeze.Sharp:EntityManager无法处理并发的ExecuteQuery调用

时间:2015-08-20 17:08:30

标签: c# breeze breeze-sharp

我在服务器端使用WebApi的胖客户端应用程序中使用Breeze.Sharp。当我在EntityManager对象上多次调用ExecuteQuery时,我注意到了一个问题。

如果ExecuteQuery调用返回的任务没有按照创建它们的顺序完成,那么EntityManager将无法更改任何已修改实体的状态。修改后的实体将始终保持Unchanged状态,从而在SaveChanges调用中发送空白响应。

public Task<IEnumerable<SomeType>> GetSomeTypeAsync(string type)
    {
        EntityQuery<SomeType> query = new EntityQuery<SomeType>()
            .Expand("Nav1,Nav2").Where(s => s.Type = type);

        return entityManager.ExecuteQuery(query);
    }

上面的代码非常简单,但是如果我在一个循环中调用此方法,其中一些调用比其他调用慢,那么我就会遇到问题。

查看源代码似乎是EntityManager不是线程安全的。 EntityManager对象上有一个内部布尔属性IsLoadingEntity,当它通过这些多个ExecuteQuery调用时保持设置为True,即使所有任务都完成,该属性也不会被设置为false。这导致SaveChanges什么都不做。

这听起来对任何人都很熟悉吗?我们有任何修正或者我做错了吗?

0 个答案:

没有答案