我尝试使用这样的转换来配置“实体键”场景:
{
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 仍处于加载模式!
我尝试对实体进行单独的配置,但仍然得到相同的结果。
Microsoft.EntityFrameworkCore.SqlServer
7.0.9