【发布时间】:2016-12-08 08:02:03
【问题描述】:
我是 EF 新手,之前设计过自定义 ORM,它们使用 TIMESTAMP 字段进行并发,并确定记录以与其他数据库同步。
为什么 EF (Core) 使用 nvarchar(max) 来存储看起来像 Guid 的内容?
即为什么 EF 会做数据库可以做的工作?
显而易见的事情是在某些时候(可能在扩展到多个服务器/数据库时)我们希望在其中存储多个 Guid,和/或可能仅仅是因为 ROWVERSION/TIMESTAMP 在目标数据库上的实现不一致英孚?
(在类似的注释中,为什么 ID 字段是 nvarchar(450)?)
更新:
migrationBuilder.CreateTable(
name: "AspNetRoles",
columns: table => new
{
Id = table.Column<string>(nullable: false),
ConcurrencyStamp = table.Column<string>(nullable: true),
Name = table.Column<string>(maxLength: 256, nullable: true),
NormalizedName = table.Column<string>(maxLength: 256, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetRoles", x => x.Id);
});
【问题讨论】:
-
EF 不应该为此使用
nvarchar(MAX),而在 EF6 中,它没有。某处可能存在配置问题,但如果这在 EF Core 中确实发生了变化,我怀疑这是一个错误,而不是一个功能。你能展示你的类定义和映射,以及生成的表吗?旁白:“(在类似的注释上,为什么 ID 字段是 nvarchar(450)?)”——这是不相关的,可能最好省略,但请注意,如果你只是简单地做,你应该能够在 SQL Server 的警告中发现问题它在 EF 之外nvarchar(MAX)。 -
这是另一篇带有数据类型屏幕截图的帖子:stackoverflow.com/questions/34252640/…
标签: entity-framework