遵循Npgsql指南映射JSON列时遇MainCategory实体未映射表错误
问题:EF Core映射JSON列时遇到实体未映射错误
我尝试按照Npgsql的JSON映射指南将类映射到JSON列,但一直遇到以下错误:
System.InvalidOperationException: 实体类型'MainCategory'未映射到表,因此无法将实体持久化到数据库。请在'OnModelCreating'中调用'ToTable'以将其映射到表。
我的模型代码如下:
public class Post { // ... public MainCategory MainCategory { get; set; } } public class Category { } public class Category<TParent> where TParent: Category { // ... [JsonIgnore] public TParent Parent { get; set; } } public class Category<TParent, TChildren> where TParent: Category, where TChildren: Category { [Column(TypeName = "jsonb")] public ICollection<Category> Children { get; set; } } public class MainCategory : Category<Category, Category> { }
对应的上下文代码:
public class MyContext : DbContext { public DbSet<Post> Posts => Set<Post>(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Post>() .OwnsOne(c => c.MainCategory, r => { r.ToJson(); r.OwnsMany(c => c.Children); }); base.OnModelCreating(modelBuilder); } }
子类别具有不同的属性,因此正确的父子关系对我来说非常重要——如果仅使用Category会很难实现。我还尝试使用两个接口来表示父/子关系,但始终遇到相同的错误。如果移除Children上的[Column(TypeName = "jsonb")],则会出现以下错误:
System.InvalidOperationException: 无法确定导航属性'OneOfTheSubCategories.Children'(类型为
ICollection<Category>)所表示的关系。请手动配置关系,或使用'[NotMapped]'属性或在'OnModelCreating'中使用'EntityTypeBuilder.Ignore'忽略此属性。
我不确定自己哪里出错了,或者这是否是一个完全不被支持的场景。必要时我可以在Post类中仅使用string并手动转换,但我试图避免这种情况。当前使用的是最新的.NET 9.0版本。
内容的提问来源于stack exchange,提问作者Camilo Terevinto
相关产品推荐
相关产品推荐

