我正在使用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();
}
}
}
答案 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"));