我目前已经在我的.NET Core Web API项目中安装并运行了EF Core 2.2.2。我使用Pomelo.EntityFrameworkCore.MySql
作为EF Core的MySQL提供程序。我能够为数据库成功创建新的迁移,但是一旦运行Update-Database
,我将收到以下错误:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本以使用正确的语法 在'2019-02-23 14:44:41.445486'附近,'浓缩液','2019-02-23 14:44:41.445486');
这很奇怪,因为我已经使用这种迁移两周了,并且在开发期间删除数据库然后重新创建数据库时,我经常运行Update-Database
。我有以下代码来生成正在播种的导致错误的数据:
//Seed categories
string[] categories = { "Concentrates", "Food", "Specials & combos", "Clones", "Seeds" };
var catCount = 1;
foreach (var category in categories)
{
modelBuilder.Entity<Category>().HasData(new Category
{
Id = catCount,
Name = category,
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now
});
catCount++;
}
以上内容通过以下方法运行:
protected override void OnModelCreating(ModelBuilder modelBuilder)
我的类别的模型定义如下:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace DataAccessLayer.Database.Store
{
public class Category : BaseEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public string Name { get; set; }
}
}
将BaseEntity
定义如下:
using System;
namespace DataAccessLayer.Database
{
public abstract class BaseEntity
{
public DateTime? CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
}
}
奇怪的是,在控制台中找到的生成的代码我能够成功地在数据库工具中执行而没有错误。它会在控制台中生成以下SQL代码,我可以看到这些代码并手动执行,而不会出现错误:
Failed executing DbCommand (277ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
INSERT INTO `Categories` (`Id`, `CreatedAt`, `Name`, `UpdatedAt`)
VALUES (1, '2019-02-23 14:44:41.445486', 'Concentrates', '2019-02-23 14:44:41.445486');
INSERT INTO `Categories` (`Id`, `CreatedAt`, `Name`, `UpdatedAt`)
VALUES (2, '2019-02-23 14:44:41.445485', 'Food', '2019-02-23 14:44:41.445485');
INSERT INTO `Categories` (`Id`, `CreatedAt`, `Name`, `UpdatedAt`)
VALUES (3, '2019-02-23 14:44:41.445484', 'Specials & combos', '2019-02-23 14:44:41.445484');
INSERT INTO `Categories` (`Id`, `CreatedAt`, `Name`, `UpdatedAt`)
VALUES (4, '2019-02-23 14:44:41.445483', 'Clones', '2019-02-23 14:44:41.445483');
INSERT INTO `Categories` (`Id`, `CreatedAt`, `Name`, `UpdatedAt`)
VALUES (5, '2019-02-23 14:44:41.445467', 'Seeds', '2019-02-23 14:44:41.445468');
这是Categories
表的CREATE语句,该语句引起问题:
CREATE TABLE `Categories` (
`Id` bigint(20) NOT NULL AUTO_INCREMENT,
`CreatedAt` datetime(6) DEFAULT NULL,
`UpdatedAt` datetime(6) DEFAULT NULL,
`Name` longtext,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8
有人可能会知道为什么在尝试运行Update-Database
却能够成功手动执行SQL时收到错误消息吗?