NHibernate.TypeMismatchException:提供的id类型错误。应为:System.Int32,获得System.Int64
我使用以下查询获取客户机。客户机具有long类型的公共IdNHibernate.TypeMismatchException:提供的id类型错误。应为:System.Int32,获得System.Int64,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我使用以下查询获取客户机。客户机具有long类型的公共Id var client = Session.CreateQuery("from Client as c where c.Id = :Id").SetParameter("Id", 1, NHibernateUtil.Int64).UniqueResult<Client>(); 那么,为什么要通过将reportid的类型从int改为long来解决问题呢。第二,为什么在我不需要报表的时候还要费心去获取报表呢?一对一键需要具有相同
var client = Session.CreateQuery("from Client as c where c.Id = :Id").SetParameter("Id", 1, NHibernateUtil.Int64).UniqueResult<Client>();
那么,为什么要通过将reportid的类型从int改为long来解决问题呢。第二,为什么在我不需要报表的时候还要费心去获取报表呢?一对一键需要具有相同的类型定义,因为它们使用相同的值。因此,ID=Int32.MaxValue+1的客户机将有一个ID=Int32.MaxValue+1的对应报告,因此它们必须都是
长的
我推荐这些文章来了解一对一以及大多数情况下你是如何真正不需要它的:
- ?
var client = Session.Get<Client>(1L); //Or
var client = Session.CreateCriteria<Client>().Add(Restrictions.Eq("Id", 1L)).UniqueResult<Client>();
HasOne<Report>(x => x.Report)
.PropertyRef(x => x.Client)
.LazyLoad()
.Cascade.SaveUpdate();
References(x => x.Client, "clientID").Unique();