【问题标题】:Datetime2 to smalldatetime conversion in EFEF 中的 Datetime2 到 smalldatetime 的转换
【发布时间】:2013-06-06 07:33:37
【问题描述】:
  protected void ButtonSave_Click(object sender, EventArgs e) {
         using (IntranETEntities context = new IntranETEntities())
         {
                CUSTOMER customer = context.CUSTOMERs.FirstOrDefault<CUSTOMER>(p => p.CODE == TxtName.Text);
                CUSTOMER_EXTENSION customerextension = null;
                IE_CUSTOMER_INFO customerInfo = null;
                ACADEMY academy = new ACADEMY();
                JOB job = new JOB();

                if (customer == null)
                {
                    customer = new CUSTOMER();
                    context.AddToCUSTOMERs(customer);

                    customerextension = new CUSTOMER_EXTENSION();
                    customer.CUSTOMER_EXTENSION.Add(customerextension);


                    customerInfo = new IE_CUSTOMER_INFO();
                    customer.IE_CUSTOMER_INFO.Add(customerInfo);
                }
                else
                {
                    customer.CUSTOMER_EXTENSION.Load();
                    customer.IE_CUSTOMER_INFO.Load();

                    customerextension = customer.CUSTOMER_EXTENSION.FirstOrDefault<CUSTOMER_EXTENSION>();
                    customerInfo = customer.IE_CUSTOMERINFO.First<IE_CUSTOMER_INFO>();

                    if (customerextension == null)
                    {
                        customerextension = new CUSTOMER_EXTENSION();
                        customer.CUSTOMER_EXTENSION.Add(customerextension);
                    }
                    else
                        customerextension.UPDATESEQ++;

                    if (customerInfo == null)
                    {
                        customer;Info = new IE_CUSTOMER_INFO();
                        customer.IE_CUSTOMER_INFO.Add(customerInfo);
                    }

                    ....
                    customerextension.CREATE_DATE = DateTime.Now;  
                    ....
                    context.SaveChanges();//Error is occuring here.
                } }

我正在使用更新的 EntityFramework。当我调试此代码时,我收到一条错误消息,提示 “将 datetime2 数据类型转换为 smalldatetime 数据类型导致值超出范围。\r\n语句已终止。” 我无权更改数据库中列的类型。并且该列不为空。我该如何解决?

感谢您的回复!!!

【问题讨论】:

    标签: c# asp.net entity-framework


    【解决方案1】:

    您在分配时将异常标记为发生:

     ....
     customerextension.CREATE_DATE = DateTime.Now; //Error is occuring here.
     ....
    

    但我希望在SaveChanges() 调用期间实际发生此异常?

    我怀疑在保存的对象图中某处还有另一个DateTime 属性(除了您指出的 CREATE_DATE),并且其他属性没有被初始化。 DateTime 属性的默认值超出了smalldatetime 要求的范围,因此如果您创建一个具有默认 DateTime 属性的新 EF 对象,它将引发此异常。

    【讨论】:

    • 我通过编写此触发器解决了我的问题 CREATE TRIGGER CustomerModifyDateTrigger ON [GENIUS3].[CUSTOMER] FOR INSERT AS BEGIN DECLARE @ dtTime datetime2 SELECT @ dtTime = MODIFY_DATE FROM INSERTED SELECT @ dtTime AS smalldatetime END跨度>
    【解决方案2】:

    smalldatetime 介于 1900-01-10 和 2079-06-06 之间。如果您的日期超出此范围(.Net 中日期时间的默认值为 0001-01-01),您将遇到此错误。

    【讨论】:

    • 但在 debug 中,CREATE_DATE 的值为 6.6.2013 HH:MM 。
    • 我解决了编写此触发器的问题 CREATE TRIGGER CustomerModifyDateTrigger ON [GENIUS3].[CUSTOMER] FOR INSERT AS BEGIN DECLARE @ dtTime datetime2 SELECT @ dtTime = MODIFY_DATE FROM INSERTED SELECT @ dtTime AS smalldatetime END 此触发器作品
    猜你喜欢
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多