【问题标题】:dotnet-ef dbcontext scaffold generates HasColumnType includes length vs HasMaxLength when used with SQLitedotnet-ef dbcontext 脚手架在与 SQLite 一起使用时生成 HasColumnType 包括长度与 HasMaxLength
【发布时间】: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?

【问题讨论】:

    标签: c# entity-framework-core fluent scaffolding


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2017-03-31
      • 2016-05-26
      相关资源
      最近更新 更多