EF代码首先出现MariaDb错误-正确的语法使用near 'max)NOT NULL

gr8qqesn  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(164)

我在一个项目中使用实体代码优先(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 answerthis,但是,模型到所需语法库的转换不应该由提供程序完成吗?另外,为什么在创建角色表时没有出现这个错误?

yeotifhr

yeotifhr1#

nvarchar(max)可能来自以前的现有迁移。您应该删除所有以前的迁移并基于此新提供程序创建新迁移。More info

相关问题