EF Core配置外键时生成PickingListId1列错误问题求助
解决EF Core中视图关联生成额外列(PickingListId1)的问题
问题根源在于你重复配置了同一对导航关系:同时在PickingListView和PickingListLine的Fluent API代码中定义了关联规则,EF Core会将它们识别为两个独立的关系,进而自动生成额外的外键列PickingListId1。
正确配置方式
只需要在其中一边完整配置关联关系即可,无需两边重复定义。以下是两种可行方案:
方案1:保留PickingListView的关联配置,简化PickingListLine配置
modelBuilder.Entity<PickingListView>(entity => { entity.ToView("view_PickingList").HasKey(e => e.PickingListId); // 在这里完整定义一对多关联 entity.HasMany(e => e.Lines) .WithOne(e => e.PickingListView) .HasForeignKey(e => e.PickingListId) .IsRequired(); }); modelBuilder.Entity<PickingListLine>(entity => { entity.ToView("view_PickingListLine").HasKey(e => e.PickingListLineId); // 属性名与数据库列名一致时,无需额外配置ColumnName // 关联关系已在PickingListView中定义,此处无需重复 });
方案2:仅在PickingListLine中配置关联
modelBuilder.Entity<PickingListView>(entity => { entity.ToView("view_PickingList").HasKey(e => e.PickingListId); }); modelBuilder.Entity<PickingListLine>(entity => { entity.ToView("view_PickingListLine").HasKey(e => e.PickingListLineId); // 在这里完整定义多对一关联 entity.HasOne(e => e.PickingListView) .WithMany(e => e.Lines) .HasForeignKey(e => e.PickingListId) .IsRequired(); // 根据实际业务需求决定是否添加IsRequired });
补充说明
如果实体类属性名和数据库视图的列名完全一致,entity.Property(e => e.PickingListId).HasColumnName("PickingListId")这段代码可以直接省略,EF Core会自动完成匹配。
内容的提问来源于stack exchange,提问作者SkollSunman
相关产品推荐
相关产品推荐

