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