首页 新闻 会员 周边

为什么加了try catch还是不能捕获异常?

0
悬赏园豆:5 [已解决问题] 解决于 2014-01-12 17:03
。。。
              if (toMappingName.ToUpper() == fromMappingName.ToUpper())
                    {
                        if (toProperty.GetSetMethod() != null 
                            && fromProperty.CanRead
                            && toProperty.CanWrite)
                        {
                            var fromValue = fromProperty.GetValue(fromEntity, null);
                            if (fromValue == null)
                                try { toProperty.SetValue(toEntity, null, null); } //这句内部引发异常
                                catch { }
                            else
                                toProperty.SetValue(toEntity, fromValue, null);
                            break;
                        }
                    }
。。。



这句是上面引发异常那句的内部代码:
/// <summary>
        /// 没有元数据文档可用。
        /// </summary>
        [XmlIgnoreAttribute()]
        [SoapIgnoreAttribute()]
        [DataMemberAttribute()]
        [EdmRelationshipNavigationPropertyAttribute("ContentManagementModel", "FK_CM_AdminUser_CM_AdminAnswer1", "CM_AdminAnswer")]
        public CM_AdminAnswer CM_AdminAnswer
        {
            get
            {
                return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<CM_AdminAnswer>("ContentManagementModel.FK_CM_AdminUser_CM_AdminAnswer1", "CM_AdminAnswer").Value;
            }
            set
            {
                ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<CM_AdminAnswer>("ContentManagementModel.FK_CM_AdminUser_CM_AdminAnswer1", "CM_AdminAnswer").Value = value; //虽然上面那句加了try..catch,但异常还是在这里被直接抛出来了
            }


        }

异常详细信息如下:

用户代码未处理 System.ArgumentException
  HResult=-2147024809
  Message=无法检索关系“ContentManagementModel.FK_CM_AdminUser_CM_AdminAnswer1”的元数据信息。如果使用映射特性,请确保已在程序集中定义了关系的 EdmRelationshipAttribute。使用基于约定的映射时,无法确定分离的实体之间关系的元数据信息。
参数名: relationshipName
  Source=System.Data.Entity
  ParamName=relationshipName
  StackTrace:
       在 System.Data.Objects.DataClasses.RelationshipManager.GetRelatedEndInternal(String relationshipName, String targetRoleName)
       在 System.Data.Objects.DataClasses.RelationshipManager.GetRelatedReference[TTargetEntity](String relationshipName, String targetRoleName)
       在 ContentManagement.Entity.EF.CM_AdminUser.set_CM_AdminAnswer(CM_AdminAnswer value) 位置 C:\Users\knife\Desktop\programbak\ContenManagement20130910\ContentManagement.Entity\EF\ContentManagement.Designer.cs:行号 3362
  InnerException:

问题补充:

我的这函数的作用是把一个对象的所有同名属性的值拷贝给另一个对象,这是部分代码, 现在好像如果要拷贝的属性是一个复杂对象时可能会报这个错误,目前拷贝报错的这个属性的类型是EF中继承自EntityObject的类型,即对应数据库的一个DataTable,即上面的属性CM_AdminAnswer是一个复杂类型。 或者如果能判断一个PropertyInfo对象是否是一个复杂类型也要可以。

空明流光的主页 空明流光 | 初学一级 | 园豆:106
提问于:2014-01-11 17:04
< >
分享
最佳答案
0

这个问题最郁闷的一点是加了try..catch竟然挡不住这个异常,连捕获到捕获不到。我最终自己定义了一个attribute, 自己判断要复制的属性有没有attribute,如果有,这个属性值就是可以被复制,否则只有基元类型,值类型和string可以被复制,其它类型一律不复制,否则会有不可预知的错误,竟然try catch都失去了作用,难道这段属于非托管代码?

空明流光 | 初学一级 |园豆:106 | 2014-01-12 16:59
其他回答(5)
0

catch { },你这个里面没东西的 catch(Exception ex)试下

收获园豆:2
幕三少 | 园豆:1384 (小虾三级) | 2014-01-11 18:17

额...,难道你不知道我上在的写法是和你写的是等效的吗?

支持(0) 反对(0) 空明流光 | 园豆:106 (初学一级) | 2014-01-11 18:29
0

汗,你不知道要抛出异常吗?基础啊。
catch(Exception err){

throw err;

}

收获园豆:1
╰☆炫〃╰芯苡╯ | 园豆:213 (菜鸟二级) | 2014-01-11 18:37

难道你没看到我要屏蔽异常吗?你写的这句我十年前就会写了

支持(0) 反对(0) 空明流光 | 园豆:106 (初学一级) | 2014-01-11 18:47
0

你不提供上下文,这是要怎么看?

看你的这个错误信息,你试着把SetValue的第二个参数设置为不为null看看呢!

收获园豆:1
幻天芒 | 园豆:37175 (高人七级) | 2014-01-11 23:09

那第二个参数要设置成什么呢?因为按照需求他就是要被设置成null的呀?

支持(0) 反对(0) 空明流光 | 园豆:106 (初学一级) | 2014-01-12 16:40
0

试试在SetValue()方法加个异常处理

收获园豆:1
清风伴你行 | 园豆:153 (初学一级) | 2014-01-12 00:34

SetValue是系统方法,调用的地方我已经加了呀

支持(0) 反对(0) 空明流光 | 园豆:106 (初学一级) | 2014-01-12 17:02

@沧海一杰: 那你如果是想屏蔽这个异常,那不如不要catch用finnally就好了??

支持(0) 反对(0) 清风伴你行 | 园豆:153 (初学一级) | 2014-01-12 19:18

@清风伴你行: 我早试过了,这个异常根本捕获不到,用什么办法都会报出来,try catch 在这一块捕获不到。try catch 失灵。

支持(0) 反对(0) 空明流光 | 园豆:106 (初学一级) | 2014-01-12 19:45
0

您好,请问,对于try catch捕获不到的异常,您是怎么定位到问题代码的呢,我现在也遇到一个捕获不到的异常,但是不知道是哪里崩掉了

看海1210 | 园豆:202 (菜鸟二级) | 2016-06-17 14:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册