码迷,mamicode.com
首页 > Windows程序 > 详细

3.C#/.NET编程中的常见异常(持续更新)

时间:2014-11-25 00:05:49      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   os   使用   sp   for   strong   

1.Object reference not set to an instance of an object.

  未将对象引用(引用)到对象的实例,说白了就是有个对象为null,但是你在用它点出来的各种东西。

2.An entity object cannot be referenced by multiple instances of IEntityChangeTracker.

  一个实体对象不能由多个IEntityChangeTracker实例引用。首先参见MSDN中对于Entity Framework中的增删改的说明,特别是修改对象那里。我们看到说明文档里有这样一句话“对象服务使用IEntityChangeTracker的实例来跟踪对附加到ObjectContext的对象的更改”,1)Tracker是用来跟踪某个对象属性更改的,2)被跟踪的是附加到某个上下文的对象,3)错误信息是说一个对象不能被多个Tracker跟踪,即一个附到特定的Context中的对象有一个Tracker。

  然后我觉着帮我解决这个问题的博客,说的不是太清楚,也可能是我理解能力比较差,试着自己分析一下。对应到原帖,An Entity指的肯定是user,为什么它会有多个IEntityChangeTracker的实例,明显是因为他被附到两个Context中,RoleManager.GetRoleById()方法和UserManager.Add()方法的上下文也就是Entities不一样。

  通俗来讲,对于同一个实体对象(数据库关联)的操作,请在同一个上下文中完成。

3.Collection was modified; enumeration operation may not execute.

  对于一个集合进行foreach遍历,如果foreach中对集合有添加和移除操作,就会报这个错。

  这是IEnumerator自身的特性决定,参见备注部分:

--------------------------------大家晚上好--------------------------------

  只要集合保持不变,枚举数就保持有效。如果对集合进行了更改(如添加、修改或删除元素),则枚举数将失效且不可恢复,并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current之间修改集合,那么即使枚举数已经无效,Current 也将返回它所设置成的元素。

  枚举数没有对集合的独占访问权;因此,枚举通过集合在本质上不是一个线程安全的过程。即使一个集合已进行同步,其他线程仍可以修改该集合,这将导致枚举数引发异常。若要在枚举过程中保证线程安全,可以在整个枚举过程中锁定集合,或者捕捉由于其他线程进行的更改而引发的异常。

--------------------------------大家晚上好--------------------------------

  只需要把foreach改为for来遍历就好了。有几个画图的错我忘了。。。今天先写这么多好了

3.C#/.NET编程中的常见异常(持续更新)

标签:blog   http   io   ar   os   使用   sp   for   strong   

原文地址:http://www.cnblogs.com/hannyblogs/p/4119824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!