如何使用Entity Framework将当前日期/时间插入日期时间数据类型字段?

时间:2013-03-25 10:35:28

标签: c# sql-server entity-framework

我正在使用Entity Framework将一行数据插入到我的Application表中。

这是班级:

public partial class Application
{
    public Application()
    {
        this.TestAccounts = new List<TestAccount>();
    }

    public int ApplicationId { get; set; }
    public string Name { get; set; }
    public byte[] RowVersion { get; set; }
    public System.DateTime ModifiedDate { get; set; }
    public virtual ICollection<TestAccount> TestAccounts { get; set; }
}

这是C#代码:

_Uow.Applications.Add(new Application { Name = name });

它给我一个错误说

  InnerException: System.Data.UpdateException
        HResult=-2146233087
        Message=An error occurred while updating the entries. See the inner exception for details.
        Source=System.Data.Entity

        InnerException: System.Data.SqlClient.SqlException
             HResult=-2146232060
             Message=The conversion of a datetime2 data type to a datetime data type
             resulted in an out-of-range value.

如何更改C#代码以在ModifiedDate字段中插入当前日期?

3 个答案:

答案 0 :(得分:0)

就是这样:

_Uow.Applications.Add(new Application
                       {
                           Name = name,
                           ModifiedDate = DateTime.Now
                       });

或者您可以在构造函数中执行此操作:

public class Application
{
    public Application()
    {
        ModifiedDate = DateTime.Now;
    }
}

顺便说一句:你得到了异常,因为默认情况下,c#DateTime比SQL的datetime更精确。如消息所示:在SQL中使用datetime2DateTime将最小值作为初始值,对于SQL datetime来说太低了。

答案 1 :(得分:0)

您可以指定新的构造函数

public Application(string Name)
{
  if(ModifiedDate == null)
   //ModifiedDate = Convert.ToDateTime(01.01.2000);
     ModifiedDate = DateTime.Now;
}

OR

public Application(string Name, System.Nullable<DateTime> modifiedDate)
{
   if(modifiedDate != null)
     //ModifiedDate = Convert.ToDateTime(01.01.2000);
     ModifiedDate = DateTime.Now;
   else
   Do stuff
}

这不是美好的,但应该做到这一点。

答案 2 :(得分:0)

你的ModifiedDate初始化为minvalue,因此会产生异常。最好使用

public System.DateTime? ModifiedDate { get; set; } to make it nullable or

在构造中初始化

public Application()
    {
        this.TestAccounts = new List<TestAccount>();
        ModifiedDate = DateTime.Now;

    }