启用了 UseLazyLoadingProxies 的 EFCore 3 throws System.NotSupportedException: 'Parent does not have a default constructor

EFCore 3 with UseLazyLoadingProxies enabled throws System.NotSupportedException: 'Parent does not have a default constructor

我正在编写一个 DDD 应用程序,我正在尝试使用 LazyLoading 选项。

我面临的问题是,如果我不使用 LazyLoading,我可以 运行 我的应用程序正常,但是一旦我尝试使用 UseLazyLoadingProxies(),当我得到一个实体时,我得到标题异常.正如我在堆栈跟踪

中看到的那样,它似乎被抛出 Castle.DynamicProxies

这是我的实体:

public class Technology //: Entity
{
    // fields
    private readonly IList<SubTechnology> subTechnologies = new List<SubTechnology>();

    // properties

    public long Id { get; private set; }
    public virtual TechnologyName Name { get; private set; }
    public virtual IReadOnlyList<SubTechnology> SubTechnologies => subTechnologies.ToList().AsReadOnly();

    public Technology() { }

    public Technology(TechnologyName technologyName) : this()
    {
        Name = technologyName;
    }

    //public void AddSubtechnology(SubTechnology subTech)
    //{

    //}

这就是我调用代码的方式:

public sealed class QuestionController
{
    private readonly InterviewsDbContext context;

    public QuestionController(InterviewsDbContext context)
    {
        this.context = context;
    }

    public string GetTechnology(long technologyId)
    {
        var tech = context.Technology.Single(t => t.Id == technologyId);
        return tech?.Name.Value;
    }
}

对我来说,这表明我没有实施我的 CTOR,但我已经尝试 public,受保护的,内部的,但我似乎无法让它工作。

我唯一能说的是域模型不在我的上下文所在的同一个程序集中...不确定是否与此问题有关..

有什么想法吗?谢谢

好吧,我认为我真的很愚蠢,我只是将我的代码转换成一些非常愚蠢的东西(贫血模型),然后问题就消失了。

我发现支持字段是 IList<T> 和类型 IReadOnlyList<T> 的 属性 并且代理无法创建类型。

异常错误在这种情况下没有多大帮助,但 IList<T> 更改为 List<T> 解决了我的问题。