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



我的EF Core鉴别符列是这样创建的

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

属性MyDiscriminator不是在MyClass上定义的——它是自动添加的,但是在创建的SQL表中将列MyDiscriminator定义为nvarchar(max)。discriminator列中的值只能来自定义的列表,即"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)

HasDiscriminator配置标识符CLR(影子或常规)属性名称、类型和关联值。相应的数据库列名、类型、约束等都像其他属性一样配置,但Property构建器会过载。

例如,可以在配置discriminator属性的代码后面添加以下内容:

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

相关内容

最新更新