gpt4 book ai didi

c# - MySql 异常 : Data too long for column 'Id' at row 1

转载 作者:行者123 更新时间:2023-11-29 02:38:48 24 4
gpt4 key购买 nike

我的 ASP.NET Core 2.2/Entity Framework 核心代码优先模型如下所示:

public class Book
{
[Column("Id", TypeName = "varchar(8)")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string Id { get; set; }

[Required, StringLength(100, MinimumLength = 1)]
public string Title { get; set; }
}

我的 MySQL 触发器创建一个唯一的 8 个字符的 ID 如下所示:

CREATE DEFINER=`root`@`localhost` TRIGGER Books_BEFORE_INSERT BEFORE INSERT ON `Books` FOR EACH ROW
BEGIN
DECLARE CNT INT DEFAULT 1;
DECLARE UUID8 VARCHAR(8) DEFAULT null;

WHILE CNT > 0 DO
SET UUID8 = UPPER((SELECT LEFT(UUID(), 8)));
SET CNT = (SELECT count(*) FROM Books WHERE Id = UUID8);

IF CNT = 0 THEN
SET new.Id := UUID8;
END IF;
END WHILE;
END

我将 [StringLength(8, MinimumLength = 8)] 添加到 Id 希望 EF 将列保持在字符范围内,但它不起作用。

如果我执行常规 INSERT 查询 ("INSERT INTO Books (Title) VALUES ('Book Name');") 没有问题,但是当我尝试在我的 Razor 页面(脚手架)上添加记录时,我得到错误:MySqlException:第 1 行的“Id”列的数据太长。我认为 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 我不必担心 EF 对插入的列做任何事情..?

为什么这不起作用?

编辑

我正在使用 Pomelo.EntityFrameworkCore.MySql NuGet 包。

最佳答案

将列类型更改为 LONGTEXT

public class Book
{
[Column("Id", TypeName = "LONGTEXT")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string Id { get; set; }

[Required, StringLength(100, MinimumLength = 1)]
public string Title { get; set; }
}

或者在你的 phpadmin 中运行这段代码

SET @@global.sql_mode= '';

关于c# - MySql 异常 : Data too long for column 'Id' at row 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57797322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com