【发布时间】:2011-07-25 00:57:16
【问题描述】:
当我尝试按名称获取属性时,我在 NHibernate 中遇到“发现不明确的匹配”异常。我正在尝试远程调试它,因为它不会发生在我的机器上,只发生在网络服务器上:/ 所以我随时吐出所有可见的属性,我得到了这个:
Failed to get property Id on UserProxy49b5a83368564e9cbd22b8e2f0a0c5a7!
All properties:
property: FirstName of type: System.String readable: True writable: True declared type: UserProxy49b5a83368564e9cbd22b8e2f0a0c5a7
... etc for other properties
property: Id of type: System.Nullable`1[System.Int32] readable: True writable: True declared type: UserProxy49b5a83368564e9cbd22b8e2f0a0c5a7
... etc for other properties
property: HibernateLazyInitializer of type: NHibernate.Proxy.ILazyInitializer readable: True writable: False declared type: UserProxy49b5a83368564e9cbd22b8e2f0a0c5a7
property: Id of type: System.Nullable`1[System.Int32] readable: True writable: True declared type: MyNamespace.ModelBase`1[System.Nullable`1[System.Int32]]
ModelBase 是定义“Id”的抽象基类,因此存在歧义。但是有两个问题困扰着我:怎么做?和为什么不在我的机器上?我也与那些代理对象交互,从来没有模棱两可,但每次都会发生在服务器上。
这样的模棱两可怎么可能存在?我尝试将绑定标志更改为.Instance | .Public,但我仍然收到错误(并且我每次都会更改我的错误输出,所以它不仅仅是一个陈旧的二进制文件)。所以对象有两个相同类型和相同名称的属性,而.NET允许这样...?
要添加更多问题,我该如何解决这个问题,是否有人对远程调试有任何建议?我现在依靠异常并手动将信息添加到输出中,这几乎没有效率。
编辑:投掷线周围的确切代码:
PropertyInfo prop = null;
try {
prop = root.GetType().GetProperty(props[0], BindingFlags.Instance | BindingFlags.Public); // props[0] == "Id"
}
catch (Exception e) {
PropertyInfo[] allprops = null;
allprops = root.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
StringBuilder sb = new StringBuilder();
foreach (PropertyInfo p in allprops)
sb.Append("property: " + p.Name + " of type: " + p.PropertyType + " readable: " + p.CanRead + " writable: " + p.CanWrite + " declared type: " + p.DeclaringType);
throw new Exception("Failed to get public property " + props[0] + " on " + root.GetType().FullName + "! All: " + sb.ToString() + " Inner: " + e.Message + " inner stack: " + e.StackTrace, e);
}
【问题讨论】:
-
可以给我们看看相关代码吗?
-
当然可以 :) 可能一开始就应该这样做,谢谢提醒。
标签: .net nhibernate reflection remote-debugging