这是一个非常基本的问题,可能会重复。任何人都可以告诉我.Net中任何程序生成的错误信息是多么有用。
今天我收到错误“发现了模糊的匹配”。在数据库中保存实体(使用EF4) 我无法弄清楚为什么会出现这个错误,根本原因是什么。附件也是如此。
这是完整的错误详细信息,
System.Reflection.AmbiguousMatchException was unhandled by user code
Message=Ambiguous match found.
Source=mscorlib
StackTrace:
at System.RuntimeType.GetPropertyImpl(String name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
at System.Type.GetProperty(String name)
at IAA.Data.EntityFramework.RepositoryWithTypedId`2.SaveOrUpdate[T](T entity)
at ABC.XYZ.ApplicationServices.AcknowledgementManagementService.SaveOrUpdate(AcknowledgementFormViewModel acknowledgementFormViewModel) in E:\RA\ABC.XYZ\app\ABC.XYZ.ApplicationServices\AcknowledgementManagementService.cs:line 123
at ABC.XYZ.Web.Controllers.AcknowledgementsController.Acknowledgements(AcknowledgementFormViewModel acknowledgementFormViewModel) in E:\RA\ABC.XYZ\app\ABC.XYZ.Web.Controllers\AcknowledgementsController.cs:line 68
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
InnerException:
答案 0 :(得分:3)
这意味着抛出了System.Reflection.AmbiguousMatchException
,但未被处理。它是从System.RuntimeType.GetPropertyImpl(String name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
抛出的,它是从System.Type.GetProperty(String name)
调用的,它是从IAA.Data.EntityFramework.RepositoryWithTypedId
调用的。2.SaveOrUpdate [T](T entity)`,
等
答案 1 :(得分:2)
Hmya,没有这样的运气。如果Type.GetProperty()方法实际上会说哪个名称不明确,那将是非常好的。但它没有,你不能轻易找到。代码存在于.NET框架中并且已经过优化,调试器无法检索 name 参数的值。您唯一的提示是您的实体模型具有两个具有相同名称的属性。无论如何都是这样的。
答案 2 :(得分:1)
调试.NET Framework可以让您进入调用堆栈到发生异常的位置,您可以在其中查看局部变量。
在Visual Studio 2010中,这与在“调试器”部分中设置“选项”一样简单。在Visual Studio 2008中,有说明here。