ServiceStack.OrmLite MultiThread错误“找不到字段定义ID”

时间:2014-01-14 21:08:19

标签: multithreading servicestack ormlite-servicestack

在使用OrmLite进行一些测试时,我遇到了多线程的一些问题。 在某些情况下,使用来自不同线程的Repo我在FieldDefinitionMap上遇到了一个随机的“并发”错误。

重现错误非常简单,只需启动10个具有大量读/写操作的线程即可获得随机错误: “未找到字段定义ID”

为了重现错误以便在新线程上第一次使用更新/插入功能,这一点非常重要。

错误来自函数:

public virtual void SetParameterValues<T>(IDbCommand dbCmd, object obj)

我能够解决它对FieldDefinitionMap的锁定,如下所示:

namespace ServiceStack.OrmLite
public class ModelDefinition  

public Dictionary<string, FieldDefinition> FieldDefinitionMap
{
get
{
    lock (this) // Locking the get works without problems
    {
        if (fieldDefinitionMap == null)
        {
            fieldDefinitionMap = new Dictionary<string, FieldDefinition>();
            foreach (var fieldDef in FieldDefinitionsArray)
            {
                fieldDefinitionMap[fieldDef.FieldName] = fieldDef;
            }
        }
        return fieldDefinitionMap; 
    }
}
}

顺便说一下,我不知道是否有更好的解决方案。

0 个答案:

没有答案