entity.GetAttributeValue<T>(attributeName)的使用总结

来源:互联网 发布:powerdvd源码输出 编辑:程序博客网 时间:2024/06/03 14:44

    这几天的项目一直与plugin相关, 之前一直习惯于使用 entity["attribute name"],结果同事给我code review的时候强烈推荐entity.GetAttributeValue<T>(attributeName),于是我做了一些research,写出来和大家分享一下


1. entity.GetAttributeValue<T>(attributeName) vs  entity["attribute name"]

显而易见, entity["attribute name"]会返回一个object, 当你的attirbue不存在而你又试图去access这个object的时候,程序会报错。

而entity.GetAttributeValue<T>(attributeName)在上述情况并不会报错,它会返回T格式的默认值。 如果T是可以赋值null的,默认值是null, 其他的情况会在之后详细列出。而且程序并不会报错。


2. The given key not present的情况

既然T是nullable的时候会返回null值,如何区分attribue不存在和attirbue存在但值是null的情况呢,可以使用entity.contains去判断,先进行attribute存不存在的判断就可以避免这种混淆


3. Nullable vs not nullable

当T是Nullable的时候, 比如CRM提供的类型,如optionset, money.它们的默认值就是null.

但大多数非CRM提供的类型,如int, datetime, Guid它们的默认值就是C#的默认值, 

数字(int, decimal,double等)的默认值是 0

日期的默认值是datetime.minValue

boolean的默认是false

Guid的默认值是Guid.Empty.

但如果你希望这些非CRM的数据类型在entity.GetAttributeValue<T>(attributeName)的attribute不存在的情况下也返回null应该怎么办呢, T的类型可以使用int?而不是简单的使用int. 这样默认值就得到了统一。


4. Invalid Cast

当你选择的T type和attribute在metadata中的type不一致的情况时, entity.GetAttributeValue<T>(attributeName)并不会尝试cast type而会直接选择throw一个InvalidCastException. 这样可以避免你使用错误的数据类型。

 

以上就是entity.GetAttributeValue<T>(attributeName)的一些总结,更多的内容可以参考MSDN和CRM MVP Dave Berry 的Blog

https://msdn.microsoft.com/en-us/library/gg326129.aspx


http://crmentropy.blogspot.com/2013/08/entitygetattributevalue-explained.html

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 想学手艺被骗学费怎么办 小腿肚后面筋和肌肉压痛怎么办 尿道囗和屁股眼中间长疮怎么办? 2个多月的宝宝蛋蛋上有个包怎么办 幼儿园睡觉自己摸下身玩怎么办 猫猫打喷嚏有透明液体怎么办 夏季穿运动鞋出了脚气怎么办 脚底长了刺瘊子怎么办 凉鞋前面踢破了怎么办 尖头鞋前面折了怎么办 月子里宝宝蛋蛋破皮怎么办 军人在训练时想上侧所怎么办 被白蚂蚁咬了怎么办 被蚂蚁咬了起包怎么办 脚踢了石头肿了怎么办 脚大拇指踢肿了怎么办 被骨头咯到了疼怎么办 被开水烫着了疼怎么办 鞋子上踩了口香糖怎么办 鞋底踩到口香糖干了怎么办 鞋子不小心踩到口香糖怎么办 站久了膝盖痛怎么办 站久了脚底板痛怎么办 蛇疮好了以后痛怎么办 站久了脚趾痛怎么办 心脏被踢了一脚怎么办 从马背上摔下来怎么办 小孩蛋蛋碰撞后有积液怎么办 小孩蛋蛋大小不一样有积液怎么办 对派出所的笔录不服怎么办 蛋蛋让尿淹了发红有小红瘩达怎么办 手被皮筋弹肿了怎么办 手被皮筋勒肿了怎么办 皮筋把手挤肿了怎么办 猫被皮筋绑久肿了怎么办 抗链0高关节疼怎么办 近视800度老了怎么办 军检体重不达标怎么办 到交房租没有钱怎么办 房租没到期房东要收回怎么办 客户指定发快递我要怎么办?