减小EF Core字符串鉴别器列的大小以允许索引

5

我的 EF Core 判别列是这样创建的

modelBuilder.Entity<MyClass>()
 .HasDiscriminator<string>("MyDiscriminator")
 .HasValue<SubClass1>(nameof(SubClass1))
 .HasValue<SubClass2>(nameof(SubClass2))
  ... etc. 

属性MyDiscriminator未在MyClass上定义 - 它会自动添加,但是创建的SQL表中将定义列MyDisciminator为nvarchar(max)。鉴别器列中的值只能来自定义的列表,例如"SubClass1"、"SubClass2"等。

如果我尝试索引鉴别器列,我会得到以下错误:

Msg 1919, Level 16, State 1, Line 29
Column 'MyDiscriminator' in table 'dbo.MyClass' is of a type that is invalid for use as a key column in an index.

有没有办法定义一个字符串鉴别器,使最大长度可以设置为更合理的值,并且可以建立索引?

如果不能通过定义鉴别器实现,那么在数据库中手动更改是否存在任何问题,例如使用以下方法:

ALTER TABLE dbo.MyClass
   ALTER COLUMN MyDiscriminator nvarchar(50)
1个回答

7

HasDiscriminator 配置鉴别器CLR(影子或常规)属性名称、类型和关联值。 相应的数据库列名、类型、约束等与任何其他属性一样进行配置 - 使用一些 Property 构建器重载。

例如,您可以在配置鉴别器属性的代码之后添加以下内容:

// Set discriminator column type to varchar(50)
modelBuilder.Entity<MyClass>()
    .Property("MyDiscriminator")
    .IsUnicode(false)
    .HasMaxLength(50);

// Create index 
modelBuilder.Entity<MyClass>()
    .HasIndex("MyDiscriminator")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接