使用Entity Framework DateTimes为我的数据库播种

时间:2016-08-08 07:49:37

标签: c# sql-server entity-framework datetime

我正在使用Code First Workflow和Entity Framework 6.1.3,我试图通过添加类似的迁移来为我的数据库添加一些数据:

public partial class SeedDatabaseWithBusinesses : DbMigration
{
    public override void Up()
    {
        Sql("INSERT INTO Businesses (GooglePlaceId, Name, CurrentMenu, LastUpdated)" +
            " VALUES ('googlePlaceIdHere', 'Examples Businesses Name', 'Fish and Chips, BLT, Chicken Sandwich', " + DateTime.UtcNow);
    }

    public override void Down()
    {
    }
}

}

但是我输入DateTime为DateTime的LastUpdated属性的方式有问题。当我在NuGet中运行update-database时,它正在抛出SQL Server 2016的一个异常,它说"语法不正确。"我知道DateTime是问题,因为异常消息会根据我对DateTime条目的操作而改变。 我尝试了DateTime.Now,DateTime.Now.ToString()和DateTime.UtcNow,这是我在另一个类似但不相同的StackOverflow问题上找到的。

我的数据库中的LastUpdated值不可为空,所以如果没有这个工作,我就不能以这种方式为我的数据库建立种子。任何指导将不胜感激。谢谢。

更新 - 添加了模型和DbContext:

public class Business
    {
        public int Id { get; set; }
        public string Name { get; set; }
        [Required]
        public string GooglePlaceId { get; set; }
        public DateTime LastUpdated { get; set; }
        public string CurrentMenu { get; set; }
    }

的DbContext:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public DbSet<Business> Businesses { get; set; }
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }

        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

如果要插入当前的UTC日期时间值,可以使用GETUTCDATE()https://msdn.microsoft.com/en-us/library/ms178635.aspx)。您的查询将如下所示:

INSERT INTO Businesses (GooglePlaceId, Name, CurrentMenu, LastUpdated)
VALUES ('googlePlaceIdHere', 'Examples Businesses Name', 'Fish and Chips', GETUTCDATE());

或者,如果你真的真的想用C#DateTime.Now进行字符串连接,你可以这样做:

 Sql("INSERT INTO Businesses (GooglePlaceId, Name, CurrentMenu, LastUpdated)" +
     " VALUES ('googlePlaceIdHere', 'Examples Businesses Name', 'Fish and Chips, BLT, Chicken Sandwich', " + DateTime.UtcNow.ToString("yyyy-mm-dd HH:MM:ss"));