报错如下:
SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。Trace info:INSERT  INTO [Customer] ([Name],[Comment],[CreateTime]) VALUES (@p1,@p2,@p3)我试了,如果是其他数据类型的属性,如Comment(varchar)为空,则没问题。而DateTime类型的属性为空则报错。但业务要求此处不对CreateTime更新,如何纠正错误以满足需求?请Grove过来人给个答案,50分奉上。另,我用的Grove Kit 2008,里面好像不再支持以前版本如ObjectQuery query = new ObjectQuery(typeof(CustomerInfo))这样创建ObjectQuery对象了。因为ObjectQuery对象改为抽象类了。那如何构造ObjectQuery对象以供ObjectOperator查询用?此问题在奉上50分。(原本想每题给100分的,但系统说我没有权利发那么高分的帖子,郁闷哦,分多了用不出去!问题解决的话,想办法申请追加分试试)

解决方案 »

  1.   

    不行哦,CreateTime字段,记载记录插入的时间,有现实意义,怎么能用NULL把它冲掉呢!
      

  2.   

    我想,关于第一个问题,我应该再详细描述一下。需求是这样的,比如有个Customer表,其中有两个字段CreateTime和EditTime,分别用于记录创建时间和修改时间。插入的时候没有问题,CreateTime 和 EditTime属性都取系统当前值就可以了。但是,修改的时候,CreateTime不应该变,而仅更新EditTime。用SQL的话,可以很容易实现——不更新CreateTime字段就是了。但是,用Grove怎么办呢?从它动态产生的语句INSERT  INTO [Customer] ([Name],[Comment],[CreateTime],[EditTime]) VALUES (@p1,@p2,@p3,@p4)可以看出,不管你有没有对属性赋值,它都要对该字段进行更新。这个实现是不符合需求的。那怎么办呢?难道在每次更新的时候,我都要将不需要修改的字段属性值先从数据库中获得,再赋给对象,再将其更新进数据库?这不是多此一举吗?还影响性能!怎么办?
      

  3.   

    NHibernate里是不是用Nullables解决的?Grove里面有吗?
      

  4.   


    不得行,该字段我已经允许为空了。可以效率低点,更新前,先通过Grove获取对象,如:
    Customer customer = (Customer)oo.Retrieve(typeof(Customer), _ID);
    再更改对象的值:
    customer.Name = "张三";
    customer.EditTime = DateTime.Now;
    再持久之:
    oo.Update(customer);这是我目前的方案,不知道有没有更好的
      

  5.   

    但是,DateTime字段Nullable的问题还是没有解决。如果我确实有需求某DateTime字段可以为空,那怎么搞哦。
      

  6.   

    第二个问题谁来回答下喃?我看Grove Kit 2008里有个Grove.ORM.PersistObjectQuery类,似乎也可以用于查询,不知道2008里是不是用这个替换ObjectQuery了?唉,Grove的文档太缺了,研究起来太不方便,但它的简单易用性又让我无法割舍!
      

  7.   

    关于第二个问题,刚从Grove作者的回信中得到了答案,有两种方法可以创建ObjectQuery对象:IObjectQuery query = new PersistObjectQuery(typeof(Customer)); 
    或着
    ObjectOpeartor oo = new ObjectOpeartor();
    IObjectQuery query = oo.NewQuery(typeof(Any Entity));
      

  8.   

    这个我因为遇到相同的,给你说说吧,oo.Update(customer); 这个可以不用对象,直接用过滤条件,
    oo.Update((typeof(KPRCS.Model.KPRCS_UserInRole),"URID="+urid,"RoleID="+rid);这里我用主键更新他的一个项.而别的不变.