george4986 Ответов: 2

При использовании entity framework для сохранения данных в БД SQL server значение даты изменяется на предыдущий день


Я использую entity framework 5 для сохранения данных из приложения в SQL Server 2014 с помощью веб-сервиса.Это приложение winforms.

класс сущностей имеет дату, объявленную следующим образом

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entities.Commen;
namespace Entities.Masters
{
   public class ChittyRecieptEntity:Utility
    {
        public DateTime ChittyRepaymentDate { get; set; }
       ///...........
       ///.........
    }
}


А класс веб-сервисов создается так, как показано ниже

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Entities.Masters;
using System.Data.Entity;
using Data;
namespace Operations.Masters
{
   public class ChittyRecieptOperations
    {
       public ChittyRecieptEntity DoSaveChittyReciept(ChittyRecieptEntity entity)
        {
            try
            {
                using (JMFLEntities ctxt = new JMFLEntities())
                {
                    TblChittyReciept tblobj = new TblChittyReciept();
                ///.....
                ///....
                    tblobj.ChittyRepaymentDate = entity.ChittyRepaymentDate;
                    ctxt.SaveChanges();
                 }
            }
            catch (Exception ex)
            {
            }
            return entity;
        }


поле базы данных-ChittyRepaymentDate, объявленное как дата, а не null

сервер находится в США (godaddy)

это поле даты передается из приложения (используя datetime. now), но после сохранения в поле даты на sql server оно сохраняется как Предыдущее значение даты.

не могли бы вы сказать мне, что я сделал не так?

Заранее спасибо
Джордж

Что я уже пробовал:

при использовании службы с локальной машины и базы данных на живом сервере дата сохраняется правильно.

предыдущая дата, выбранная в окне выбора даты приложения, сохраняется правильно

выбрав дату отмечать дважды (другие, чем сейчас, то сейчас)
сохраняет правильно

дата перехода из приложения с datetime. now и датой выбора даты по умолчанию (текущая дата) сохраняет неверную или предыдущую дату

при использовании точки останова в отладчике можно увидеть, что значение даты, передаваемой из приложения, является правильным, а сохранение-неправильным на живом сервере.

2 Ответов

Рейтинг:
5

george4986

Я решил эту проблему, передав преобразованное время с помощью часового пояса в приложении.Так как использование приложения находится в пределах Индии.Я использовал вот так

public static DateTime toISTDate(DateTime input)
       {
           return TimeZoneInfo.ConvertTime(input.Date, TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"));
       }


и преобразованный ввод даты как

Entity.ChittyRepaymentManualDate = FormUtility.toISTDate(dtpManualRcptDate.Value);


Это решило мою проблему.Я думаю, что при использовании entity framework значение datetime. now, передаваемое из приложения, изменяется на время, основанное на местоположении размещенных пространств.


Рейтинг:
1

P_Z

Привет,
Вы пытались вызвать контекст?AcceptAllChanges() ?
Следующая ссылка в C# - метод SaveChanges и AcceptAllChanges в Entity Framework-переполнение стека[^] содержит использование обоих методов.

using (JMFLEntities ctxt = new JMFLEntities())
                {
                    TblChittyReciept tblobj = new TblChittyReciept();
                ///.....
                ///....
                    tblobj.ChittyRepaymentDate = entity.ChittyRepaymentDate;
//Edit: as you're creating a new EF object, I think you should attach it to context such as: 
ctxt.TblChittyReciepts.AddObject(tblobj); 

                    ctxt.SaveChanges();
                    ctxt.AcceptAllChanges(); 
                 }


george4986

в моем случае это не сработало.Спасибо, что уделили мне время ;-)