Tom*_*mFp 7 sql-server entity-framework-core
我的 EF Core 鉴别器列是这样创建的
modelBuilder.Entity<MyClass>()
.HasDiscriminator<string>("MyDiscriminator")
.HasValue<SubClass1>(nameof(SubClass1))
.HasValue<SubClass2>(nameof(SubClass2))
... etc.
Run Code Online (Sandbox Code Playgroud)
属性 MyDiscriminator 未在 MyClass 上定义 - 它会自动添加,但是创建的 SQL 表将 MyDisciminator 列定义为 nvarchar(max) 鉴别器列中的值只能来自定义的列表,即“SubClass1”、“SubClass2” ETC。
如果我尝试对鉴别器列进行索引,我会得到
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.
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以定义字符串鉴别器,以便可以将最大长度设置为更合理的值 - 并且可以建立索引?
或者,如果没有,使用类似的方法在数据库中手动更改它是否会存在任何陷阱
ALTER TABLE dbo.MyClass
ALTER COLUMN MyDiscriminator nvarchar(50)
Run Code Online (Sandbox Code Playgroud)
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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1010 次 |
| 最近记录: |