导航属性未在具有转换的“实体键”场景中加载

问题描述 投票:0回答:0

我尝试使用这样的转换来配置“实体键”场景:

{
    var ScoringRuleConverter = new ValueConverter<ScoringRuleId, int>(
         v => v.Value,
         v => new ScoringRuleId(v));

    var ScoringRuleItemIdConverter = new ValueConverter<ScoringRuleItemId, int>(
          v => v.Value,
          v => new ScoringRuleItemId(v));

    builder.HasKey(c => c.Id);
    builder.Property(c => c.ScoringRuleId).HasConversion(ScoringRuleConverter);
    builder.Property(c => c.Id).ValueGeneratedNever();
           
    builder.OwnsMany(h => h.ScoringRuleItems, mi =>
            {
                mi.WithOwner().HasForeignKey(d => d.ScoringRuleId);
                mi.HasKey(d => d.Id);
                mi.Property(m => m.ScoringRuleItemId).HasConversion(ScoringRuleItemIdConverter);
                mi.Property(m => m.ScoringRuleItemId).ValueGeneratedNever();
                mi.Property(m => m.ScoringRuleId).HasConversion(ScoringRuleConverter);
               
                mi.OwnsMany(h => h.ScoringRuleItemHistories, mih =>
                {                    
                    mih.WithOwner().HasForeignKey(d => d.ScoringRuleItemId);
                    mih.HasKey(d => d.ScoringRuleItemHistoryId);
                    mih.Property(m => m.ScoringRuleItemHistoryId).HasConversion(ScoringRuleItemHistoryId=> ScoringRuleItemHistoryId.Value, value => new ScoringRuleItemHistoryId(value));
                    mih.Property(m => m.ScoringRuleItemHistoryId).ValueGeneratedNever();
                    mih.Property(m => m.ScoringRuleItemId).HasConversion(ScoringRuleItemIdConverter);
                });
            });
}

使用这些模型类:

public class ScoringRule : Entity
{
    public ScoringRuleId Id { get; private set; }

    //.....
       
    private readonly ICollection<ScoringRuleItem> _ScoringRuleItems = new List<ScoringRuleItem>();

    public IReadOnlyCollection<ScoringRuleItem> ScoringRuleItems  => _ScoringRuleItems.ToList();

    private ScoringRule() { }

    private ScoringRule(string title, ScoringRuleType scoringRuleType)
    {
        Id = Guid.NewGuid();
        // ....
    }
}

public class ScoringRuleItem
{
    public ScoringRuleItemID Id { get; private set; }   
    public ScoringRuleId ScoringRuleId { get; set; }

    private ICollection<ScoringRuleItemHistory> _scoringRuleItemHistories=new List<ScoringRuleItemHistory>();
    public IReadOnlyCollection<ScoringRuleItemHistory> ScoringRuleItemHistories => _scoringRuleItemHistories.ToList();

    private ScoringRuleItem() { }

    protected internal ScoringRuleItem(Guid scoringRuleId, decimal maxAmount, string userId)
    {
        //....
    }
}

插入实体工作正常,但在使用

ScoringRule
获取
Items
列表中,EF 仍处于加载模式!

我尝试对实体进行单独的配置,但仍然得到相同的结果。

  • VS 2022(版本17.6.5)
  • Microsoft.EntityFrameworkCore.SqlServer
    7.0.9
  • .NET 7
c# entity-framework domain-driven-design
© www.soinside.com 2019 - 2024. All rights reserved.