首页  »   .NET新技术

Nhibernate的T Get<T>(object id),参数id的类型不匹配时会出现错误

网友分享于:2015-04-20  浏览:3次
Nhibernate的T Get<T>(object id),参数id的类型不匹配时会出现异常


Nhibernate通过主键获取记录的方法是T Get<T>(object id);   由于id的类型是object, 这样,调用时,当出现类型不匹配(比如数据表的主键的类型是int,但传入的是诸如"2"这样的字符串)就会报类似如下异常:
Provided id of the wrong type. Expected: System.Int32, got System.String

因为是object类型,所以,尤其是团队开发,很难保证不出现上述异常。
可以通过这种方式解决,得到实体类型T的主属性,然后对参数id进行类型转换。 问题是如何能够得到C#实体类的主属性呢? 我已经用System.ComponentModel.DataAnnotations.Key属性修饰主属性了。     或者说,还有没有别的解决方式?是不是可以通过NHibernate的session解决呢?我刚接触NHibernate,不太熟悉, 请大家赐教。
------解决思路----------------------
一般来说,如果你设计一个程序时使用“空洞的超类型”,那么就无法保证开发质量,只能靠大规模不断测试,而且必须等待测试结果。所以设计时应该应该采用尽可能具体的类型,强类型来设计。你的id是string、long,还是你自己定义的接口(或者虚拟父类型)都可以,不应该仅仅当作object。

相关解决方案

最新解决方案