当前位置: 代码迷 >> .NET新技术 >> Nhibernate的T Get<T>(object id),参数id的类型不匹配时会出现错误
  详细解决方案

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

热度:527   发布时间:2016-04-25 01:24:11.0
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。
  相关解决方案