最近很多小伙伴都在问Redis使用命令行的方式获取hashtypekey的value值和redis获取hash中所有的key这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展ASP.
最近很多小伙伴都在问Redis 使用命令行的方式 获取 hash type key 的value值和redis获取hash中所有的key这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展ASP.NET MVC another entity of the same type already has the same primary key value、C++ Json Assertion failed type_ == nullValue || type_ == objectValue、HashMap遍历key和value的两种方式、java如何对List等相关知识,下面开始了哦!
本文目录一览:- Redis 使用命令行的方式 获取 hash type key 的value值(redis获取hash中所有的key)
- ASP.NET MVC another entity of the same type already has the same primary key value
- C++ Json Assertion failed type_ == nullValue || type_ == objectValue
- HashMap遍历key和value的两种方式
- java如何对List
Redis 使用命令行的方式 获取 hash type key 的value值(redis获取hash中所有的key)
1. 之前只是非常简单的看了下 get key 和 set key
但是这样 设置的 key value 应该是都 string 类型的
2. 但是没考虑过其他类型的 是如何获取 相关内容的 ,一直 想当然了.
比如获取 非上下文所有的 key 的名字
keys M*
这里 * 应该是通配符 或者可以理解为是正则表达式.
注意是大小写敏感的
3. 注意看一下 这个key 的 类型
4. hash 类型的 key 进行获取的时候 是需要 其他方式来读取的 比如
hget
注意命令提示符 是 key 和 filed 的
这里说一下获取 fileds 的命令
hkeys keyname
获取 hash key 里面所有数据的命令
hvals keyname
一次性获取所有的 键值对的命令
hgetall keyname
ASP.NET MVC another entity of the same type already has the same primary key value
ASP.NET MVC项目 Repository层中,Update、Delete总是失败
another entity of the same type already has the same primary key value
在项目里的Repository层中的涉及到数据的update方法总是报错,delete时有时也会报错,报的错误是
Attaching an entity of type ''Model.Diary'' Failed because another entity of the same type already has the same primary key value. This can happen when using the ''Attach'' method or setting the state of an entity to ''Unchanged'' or ''Modified'' if any entities in the graph have conflicting key values. This may be because some entities are new and have not yet received database-generated key values. In this case use the ''Add'' method or the ''Added'' entity state to track the graph and then set the state of non-new entities to ''Unchanged'' or ''Modified'' as appropriate.
按字面意思看,发生异常的原因在于已经存在了一个实体与要进行操作的实体存在相同的主键,相互冲突。
解决方案:
-
查询时让EF不要跟踪
即在使用EF上下文对象查询数据时添加 AsNoTracking(),显示声明不要让EF跟踪对象
1 /// <summary> 2 /// 根据指定条件查询数据 3 </summary> 4 <param name="whereLambda">查询条件 Linq表达式 </param> 5 <returns>符合条件的数据列表</returns> 6 public virtual List<T> GetListBy(Expression<Func<T,bool>> whereLambda) 7 { 8 return db.Set<T>().Where(whereLambda).AsNoTracking().ToList(); 9 }
-
在进行更新和删除时首先移除主键实体(如果存在)再进行操作
首先检查是否已经存在相同主键实体,如果存在则移除,然后再开始进行更新或删除处理,由于新增时,主键一定不会相同,因此新增数据可以不需要判断是否存在相同主键实体。
1 2 监测Context中的Entity是否存在,如果存在,将其Detach,防止出现问题 3 4 <param name="entity"></param> 5 <returns></returns> 6 private bool RemoveHoldingEntityInContext(T entity) 7 8 ObjectContext objContext = ((IObjectContextAdapter)db).ObjectContext; 9 var objSet = objContext.CreateObjectSet<T>(); 10 var entityKey = objContext.CreateEntityKey(objSet.EntitySet.Name,entity); 11 object foundEntity; 12 var exists = objContext.TryGetobjectByKey(entityKey,1)">out foundEntity); 13 if (exists) 14 { 15 objContext.Detach(foundEntity); 16 } 17 return (exists); 18 }
1 virtual int Modify(T model,1)">params string[] proNames) 2 3 RemoveHoldingEntityInContext(model); 4 //4.1将 对象 添加到 EF中 5 DbEntityEntry entry = db.Entry(model); 6 4.2先设置 对象的包装 状态为 Unchanged 7 entry.State = EntityState.Unchanged; 8 4.3循环 被修改的属性名 数组 foreach (string proName in proNames) 10 11 4.4将每个 被修改的属性的状态 设置为已修改状态;后面生成update语句时,就只为已修改的属性 更新 12 entry.Property(proName).IsModified = true; 13 14 生成sql语句到数据库执行 15 db.SaveChanges(); 16 }
Stackflow上也有一篇文章这样的问题,传送门
博客园上也有一篇,解决方案,传送门
总结
以上是小编为你收集整理的ASP.NET MVC another entity of the same type already has the same primary key value全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
C++ Json Assertion failed type_ == nullValue || type_ == objectValue
遇到一个 json 的问题,Assertion failed type_ == nullValue || type_ == objectValue用 C++ 谢了一个通过调用 jni 访问 java 类的方法,穿入的参数是 string 数组,但是由于 java 的原因,所以实际穿入的是 jobjectarray
jobjectArray str_arr_1 = CstringtoObject(env,arg_of_1); jobjectArray str_arr_2 = CstringtoObject(env,arg_of_2); jstring ss = (jstring)env->CallObjectMethod(ec,mid,str_arr_1 ,str_arr_2 ); string re = JStringToCString(env,res);
其中 CstringtoObject 是吧字符串数组转化为对象数组,然后返回一个 jstring 格式的 Json 字符串,然后把 jstring 格式的字符串转化为 string 格式的 re;
之后就是把 json 转成结构体了。
{"total:4000","JsonList":
["{"SHIPENAME":"HELLO","SHIPETYPE":"TUG"}",
"{"SHIPENAME":"WORD,"SHIPETYPE":"PASSANGER"}"
]
}
vector<struct info> stringtovector(string ss) { Json::Features feature = Json::Features::strictMode(); Json::Value val; Json::Reader reader(feature); vector<struct ship_info> vt; if(reader.parse(ss,val)) { Json::Value val_arry = val["JsonList"]; int isize = val_arry.size(); for(int nindex = 0;nindex<isize;++nindex) { ship_info ship; ship.SHIPENAME = val_arry[nindex]["SHIPENAME"].asString(); ...... } } return vt }
在
ship.SHIPENAME = val_arry[nindex]["SHIPENAME"].asString();
这一句会返回 C++ Json Assertion failed type_ == nullValue || type_ == objectValue 错误,不知道为什么,虽然我解析的是 [{}{}] 形式的 json 但是我也用了 val [index]["name"].c_str (); 了呀??
求对 JSON 比较熟的人来指点一下。
HashMap遍历key和value的两种方式
第一种:
Map map = new HashMap();
Iterator iter = map.entrySet().iterator(); \\获取key和value的set
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next(); \\把hashmap转成Iterator再迭代到entry
Object key = entry.getKey(); \\从entry获取key
Object val = entry.getValue(); \\从entry获取value
}
效率高,以后一定要使用此种方式!
第二种:
Map map = new HashMap();
Iterator iter = map.keySet().iterator(); \\获取key的set
while (iter.hasNext()) {
Object key = iter.next(); \\从iterator遍历获取key
Object val = map.get(key); \\从hashmap遍历获取value
}
遍历了两次,效率比方法一低
java如何对List
今天关于Redis 使用命令行的方式 获取 hash type key 的value值和redis获取hash中所有的key的介绍到此结束,谢谢您的阅读,有关ASP.NET MVC another entity of the same type already has the same primary key value、C++ Json Assertion failed type_ == nullValue || type_ == objectValue、HashMap遍历key和value的两种方式、java如何对List等更多相关知识的信息可以在本站进行查询。
本文标签: