使用实体框架为Azure数据库使用TimeSpan格式

时间:2014-11-21 11:58:26

标签: c# asp.net asp.net-mvc azure

我尝试使用Entity Framework将数据从我的ASP.NET MVC应用程序插入到我的Azure数据库中。

在我的数据库中,我有一个名为ShutdownTime的列,其数据类型为Time。 在将表实现到我的ASP.NET MVC应用程序之后,我可以看到,通过将数据插入到我的表中,我必须使用TimeSpan数据类型。

public partial class Vm
{
    public int Vm_Id { get; set; }
    public System.TimeSpan ShutdownTime { get; set; }
    public string VmName { get; set; }
    public string DeploymentId { get; set; }
}

这是我的功能

public ActionResult Edit(string newVmName, TimeSpan newShutdownTime, string newServiceName, bool startVm)
{
    var NewVmEntry = new Vm();
    newShutdownTime = new TimeSpan(1, 12, 20, 10);

    // Assign standard name
    NewVmEntry.VmName = "MyVM";
    NewVmEntry.ShutdownTime = newShutdownTime;
    NewVmEntry.DeploymentId = "MyDID";

    azureContext.Vms.Add(NewVmEntry);
    azureContext.SaveChanges();

    if (startVm == true)
    {
        StartVM(newServiceName, newVmName);
    }
    return View("Index");
}

但我总是在SaveChanges()

收到此错误

" SqlDbType.Time溢出。价值' 1.12:20:10'超出范围。必须在00:00:00.0000000和23:59:59.9999999之间。"

错误似乎很清楚。但我可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

时间(7)仅支持不到24小时的时间跨度。阅读这篇文章:

Entity Framework TimeSpan - Time Error

尝试从时间跨度中删除日期部分。

newShutdownTime = TimeSpan(12, 20,10);

答案 1 :(得分:0)

我不确定我是否认为在一个时间段内存储一天的时间是个好主意,但错误很明显。

newShutdownTime = new TimeSpan(1, 12, 20, 10);

在上面一行中,您创建的持续时间为1天,12小时,20分钟和10秒。显然这不起作用,因为时间跨度的唯一方式就是它代表了午夜之后的时间量。现在还不清楚你想要设置这个va的时间; lue但是下面不会以同样的方式失败

newShutdownTime = new TimeSpan(0, 12, 20, 10);

这会将字段设置为12小时,20分钟和10秒,或者将时间设置为12:20:10。