我的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")