2013-06-06 2 views
1
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Приложение завершено». У меня нет разрешения на изменение типа столбца в базе данных. И столбец не равен нулю. Как я могу это исправить?Datetime2 to smalldatetime conversion in EF

Спасибо за ваш ответ !!!

ответ

0

smalldatetime находится между 1900-01-10 и 2079-06-06. Если ваша дата вне этого диапазона (значение по умолчанию для datetime в .Net равно 0001-01-01), вы получите эту ошибку.

+0

Но при отладке значение CREATE_DATE составляет 6.6.2013 ЧЧ: ММ. – kapozade

+0

я решил мою проблему с записью этого триггера CREATE TRIGGER CustomerModifyDateTrigger ON [GENIUS3]. [КЛИЕНТ] ВСТАВКА AS НАЧАТЬ DECLARE @ dtTime Datetime2 ВЫБРАТЬ @ dtTime = MODIFY_DATE FROM INSERTED ВЫБРАТЬ @ dtTime AS smalldatetime END этот триггер работает – kapozade

0

Вы обозначаете исключение, как происходит в момент задания:

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

Но я бы ожидать, что это исключение на самом деле происходит во время SaveChanges() вызова?

Я подозреваю, что есть еще один объект DateTime (кроме CREATE_DATE, который вы указываете) где-то в графе объектов сохраняется, а другое свойство не инициализируется. Значение по умолчанию для свойства DateTime находится за пределами диапазона, требуемого smalldatetime, и поэтому, если вы создадите новый объект EF со свойством DateTime по умолчанию, оно выкинет это исключение.

+0

я решить мою проблему с записью этого триггера CREATE TRIGGER CustomerModifyDateTrigger ON [GENIUS3]. [КЛИЕНТ] ВСТАВКА AS НАЧАТЬ DECLARE @ dtTime datetime2 SELECT @ dtTime = MODIFY_DATE FROM INSERTED SELECT @ dtTime AS smalldatetime END – kapozade