Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “如何执行”;要么全有,要么全无”;与mongoDB合作?_C#_Mongodb_Transactions_Push_Insertion - Fatal编程技术网

C# “如何执行”;要么全有,要么全无”;与mongoDB合作?

C# “如何执行”;要么全有,要么全无”;与mongoDB合作?,c#,mongodb,transactions,push,insertion,C#,Mongodb,Transactions,Push,Insertion,我需要在文档的字段数组中插入一些元素。好。。。我知道Mongo有原子更新推。。。事实上,我需要在许多文档中进行这种插入。情况如下(我需要为每个用户名插入一个角色数组): 假设在将角色“推”到第三个用户名时连接断开。我需要回滚以前的操作。有什么想法吗 从我对MongoDB的理解来看,它对多个集合不符合ACID。现在,如果您一次只更新一个集合,您应该会很好。否则,如果您愿意,不符合酸性要求将成为包装箱上警告标签的一部分 public override void AddUsersToRole

我需要在文档的字段数组中插入一些元素。好。。。我知道Mongo有原子更新推。。。事实上,我需要在许多文档中进行这种插入。情况如下(我需要为每个用户名插入一个角色数组):


假设在将角色“推”到第三个用户名时连接断开。我需要回滚以前的操作。有什么想法吗

从我对MongoDB的理解来看,它对多个集合不符合ACID。现在,如果您一次只更新一个集合,您应该会很好。否则,如果您愿意,不符合酸性要求将成为包装箱上警告标签的一部分

 public override void AddUsersToRoles(string[] usernames, string[] roleNames)
        {
            foreach (string role in roleNames)
            {
                if (!this.RoleExists(role))
                {
                    throw new ProviderException(String.Format("The role '{0}' was not found.", role));
                }
            }

            //How to guarantee that all users will be updated with roles?
            foreach (string user in usernames)
            {
                var docs = this.users.Update(Query.And(Query.EQ("Username", user),
                    Query.EQ("Applications.Name", this.ApplicationName)), Update.AddToSetEach("Applications.$.Roles", 
                   new BsonArray(roleNames)));
            }
        }