我在尝试添加新迁移时遇到此错误,同时添加具有 HierarchyId 属性的新实体
无法创建类型为“”的“DbContext”。异常“‘HierarchyId’属性‘Node.HierarchyId’无法映射到数据库类型‘hierarchyid’,因为数据库提供程序不支持将‘HierarchyId’属性映射到‘hierarchyid’列。考虑映射到不同的数据库类型或使用值转换器将属性值转换为数据库支持的类型。请参阅 https://aka.ms/efcore-docs-value-converters 了解更多信息。或者,使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”从模型中排除该属性。尝试创建实例时抛出。有关设计时支持的不同模式,请参阅 https://go.microsoft.com/fwlink/?linkid=851728
builder.Entity<Node>(b => {
b.ConfigureBaseEntityProperties("Nodes");
b.HasDiscriminator(c => c.Type)
.HasValue<RoomNode>(NodeType.Room.ToString())
.HasValue<EstimateNode>(NodeType.Estimate.ToString())
.HasValue<FolderNode>(NodeType.Folder.ToString())
.HasValue<AssignmentNode>(NodeType.Assignment.ToString());
//Properties
b.Property(q => q.Name).IsRequired().IsUnicode(false).HasMaxLength(150);
b.Property(q => q.Type).IsRequired().IsUnicode(false).HasMaxLength(16);
b.Property(e => e.HierarchyId)
.HasColumnType("hierarchyid");
});
Configure<AbpDbContextOptions>(options =>
{
/* The main point to change your DBMS.
* See also RestorNetMigrationsDbContextFactory for EF Core tooling. */
options.UseSqlServer(optionsBuilder =>
{
optionsBuilder.UseQuerySplittingBehavior(QuerySplittingBehavior.SingleQuery);
optionsBuilder.UseHierarchyId();
});
});
HierarchyId 必须在 DbContextOptionsBuilder 中配置,而不是在 DbContextOptions 中
public RestorNetDbContext CreateDbContext(string[] args)
{
RestorNetEfCoreEntityExtensionMappings.Configure();
var configuration = BuildConfiguration();
var builder = new DbContextOptionsBuilder<RestorNetDbContext>()
.UseSqlServer(r => {
configuration.GetConnectionString("Default");
r.UseHierarchyId();
});
return new RestorNetDbContext(builder.Options);
}