我在一个项目中使用实体代码优先(EF核心版本6)。迁移在sql服务器上正确工作,但在MariaDb上不工作。
我通过这些指令^,^使用了Pomelo.EntityFrameworkCore.MySql提供程序,还通过此guide使用了Devart.Data.MySql.EFCore提供程序,因此我可以连接到MariaDb,但是,当应用程序到达迁移线(context.Database.Migrate();
)时,我收到了此错误:
执行DbCommand失败(2毫秒)[参数=[],命令类型=“文本”,命令超时=“30”]
CREATE TABLE Users (
Id int AUTO_INCREMENT UNIQUE NOT NULL,
Username nvarchar(450) NOT NULL,
`Password` nvarchar(max) NOT NULL,
DisplayName nvarchar(max) NOT NULL,
IsActive bit NOT NULL,
LastLoggedIn datetime NULL,
PRIMARY KEY (Id)
)
SQL语法中有错误;检查与您的MariaDB服务器版本对应的手册,以了解在第4行使用“max)NOT NULL、DisplayName nvarchar(max)NOT NULL、IsActive bit NOT NUL...”附近的正确语法
我的实体(用户、角色和UserRole)如下:
用户.cs
public class User
{
public User()
{
UserRoles = new HashSet<UserRole>();
}
public int Id { get; set; }
[MaxLength(50, ErrorMessage = "")]
public string Username { get; set; }
[MaxLength(50, ErrorMessage = "")]
public string Password { get; set; }
[MaxLength(50, ErrorMessage = "")]
public string DisplayName { get; set; }
public bool IsActive { get; set; }
public DateTime? LastLoggedIn { get; set; }
public ICollection<UserRole> UserRoles { get; set; }
}
角色.cs
public class Role
{
public Role()
{
UserRoles = new HashSet<UserRole>();
}
public int Id { get; set; }
[MaxLength(50, ErrorMessage = "")]
public string Name { get; set; }
public ICollection<UserRole> UserRoles { get; set; }
}
用户角色.cs:
public class UserRole
{
public int UserId { get; set; }
public int RoleId { get; set; }
public User User { get; set; }
public Role Role { get; set; }
}
有趣的是,创建了数据库,也创建了role和__efmigrationshistory表,但是没有创建user表,并发生了上述错误。
我做错了什么?
我看到了this answer和this,但是,模型到所需语法库的转换不应该由提供程序完成吗?另外,为什么在创建角色表时没有出现这个错误?
1条答案
按热度按时间yeotifhr1#
nvarchar(max)
可能来自以前的现有迁移。您应该删除所有以前的迁移并基于此新提供程序创建新迁移。More info