我正在尝试加载具有多个导航属性的模型。大多数引用的模型加载正常,但在尝试Include()
引用的列表时,项目与System.ArgumentException - Static field requires null instance, non-static field requires non-null instance
崩溃。
装载
var project =
db
.Projects
.Include(x => x.Fittings) // offending Include
.Include(x => x.CostParameter) // works
.Include(x => x.ProcessParameter) // works
.Include(x => x.CreatedByUser) // works
.Single(x => x.Id == package.IsPartOfProjectId);
为了使问题更复杂,有问题的List是一个抽象类。此外,列表还可以包含另一个抽象类的子类。
modelBuilder.Entity<ButtWrap>().HasBaseType<Fitting>();
modelBuilder.Entity<Elbow>().HasBaseType<ButtWrap>();
模型配置
modelBuilder.Entity<Project>()
.HasMany(x => x.Fittings)
.WithOne(x => x.Project)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
项目模型
public sealed class Project : CommonTypes.ProjectBase
{
public int ProjectTrackingNumber { get; set; }
public string Name { get; set; }
public bool IsManufacture { get; set; }
public bool IsCostEstimate { get; set; }
public string QueueStatus { get; set; }
public DateTime CreatedAt { get; set; }
public List<Fitting> Fittings { get; set; } = new List<Fitting>();
public Meta Meta { get; set; }
public FittingsInterfaceUser CreatedByUser { get; set; }
public CostParameter CostParameter { get; set; }
public ProcessParameter ProcessParameter { get; set; }
}
public class ProjectBase : EntityBaseIdentifier, IAggregateRoot
{
public ProjectBase(long entityId) : base(entityId)
{
}
protected override void Validate()
{
throw new NotImplementedException();
}
}
除了一些复杂的结构外,我实际上已经提前完成了这项工作。然而,在某个地方,我引入了一个错误。
由于错误有点神秘,我不知道从哪里开始寻找,所以欢迎所有建议。
答案 0 :(得分:0)
问题当然是我在原始问题中没有发布的其中一个课程。我愚蠢地在抽象的“getter
”类中添加了一个只有Fittings
的抽象字段。所以,有趣的是,“神秘的错误信息”实际上现在已经完全合理了。
public abstract string FittingsType { get; }
引入此字段是为了帮助遗留系统,并始终从实现基类返回硬编码值。
非常感谢所有引导我走向正确方向的评论。