dotnet-ef dbcontext 脚手架在与 SQLite 一起使用时生成 HasColumnType 包括长度与 HasMaxLength
Posted
技术标签:
【中文标题】dotnet-ef dbcontext 脚手架在与 SQLite 一起使用时生成 HasColumnType 包括长度与 HasMaxLength【英文标题】:dotnet-ef dbcontext scaffold generates HasColumnType includes length vs HasMaxLength when used with SQLite 【发布时间】:2021-06-07 09:21:48 【问题描述】: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?
【问题讨论】:
【参考方案1】:您指出的文档适用于 EF Core,而您链接到的 *** 问题是指 EF 6。正如您在 documentation 中看到的那样,在 EF 6 HasColumnType
中只需要类型,没有 精度、比例、长度等......。所以这已经改变了。
无论如何,我对 SQLite 了解不多,所以我在这里可能错了,但我相信根本没有长度限制。即使您声明 TEXT 或 VARCHAR 的大小,它也会 just ignore it.
请注意,SQLite 会忽略类型名称后面的括号中的数字参数(例如:“VARCHAR(255)”) - SQLite 不会对字符串的长度施加任何长度限制(除了大的全局 SQLITE_MAX_LENGTH 限制) 、BLOB 或数值。
【讨论】:
以上是关于dotnet-ef dbcontext 脚手架在与 SQLite 一起使用时生成 HasColumnType 包括长度与 HasMaxLength的主要内容,如果未能解决你的问题,请参考以下文章