如何使用EF Core Fluent API与Value Convertors创建无导航属性外键
问题原因
你当前的Fluent API写法存在参数误用:HasOne() 方法的入参需要传入指向关联主体实体的导航属性,你直接传入了已经定义为外键的BlogId属性,EF Core会判定你要新增同名的导航属性,因此触发属性名冲突的报错。
解决方案
直接使用泛型重载指定关联的主体类型即可,不需要在实体中定义任何导航属性:
modelBuilder.Entity<Post>(u => { u.HasKey(x => x.Id); u.Property(x => x.Id).HasConversion(postIdConvertor); u.Property(x => x.BlogId).HasConversion(blogIdConvertor); // 正确的无导航外键配置 u.HasOne<Blog>() .WithMany() .HasForeignKey(p => p.BlogId); });
这种写法不需要修改任何领域模型代码,Blog和Post实体都不需要增加额外的导航属性,完全符合DDD聚合设计的封装要求。生成的迁移会和你之前有导航属性时的外键约束完全一致,数据库层面的数据完整性可以得到保障。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

