dotnet-ef dbcontext 脚手架在与 SQLite 一起使用时生成 HasColumnType 包括长度与 HasMaxLength

问题描述

TLDR; .HasColumnType() 的 Microsoft 文档指出“... 应该是完整的类型名称包括精度、小数位数、长度...”。这似乎与此 stack overflow answer 相矛盾 - 推荐的用法是否已更改?

使用 EF Core 3.1(和 5)、sqlite 和 northwind 数据库,遵循 MJPrice Cs8 & .Net Core 3 Chapter14 中的示例,我使用 dotnet ef scaffold ... 创建类似的代码并与本书进行比较。这个工具生成了很多 .HasColumnType() 方法,没有 HasMaxLength() 方法

.HasMaxLength(15) 替换为 .HasColumnType("nvarchar(15)") 时是否正确捕获了最大长度(例如 Category 的 CategoryName 属性)?

由于 SQLite stores types 的方式,.HasColumnType() 是否是不必要的,因此本示例中仅真正需要最大长度信息,即数据库提供程序是 sqlite?

解决方法

您指出的文档是针对 EF Core 的,而您链接的 stackoverflow 问题是指 EF 6。正如您在 documentation 中看到的,在 EF 6 HasColumnType 中只需要类型,没有精度、比例、长度等...。所以这已经改变了。

无论如何,我对 SQLite 了解不多,所以我在这里可能是错的,但我相信根本没有长度限制。即使您声明了 TEXT 或 VARCHAR 的大小,它也会 just ignore it.

请注意,SQLite 会忽略类型名称后面括号中的数字参数(例如:“VARCHAR(255)”)——SQLite 不会对字符串的长度施加任何长度限制(除了大的全局 SQLITE_MAX_LENGTH 限制) 、BLOB 或数值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...