启用了UseLazyLoadingProxies的EFCore 3引发System.NotSupportedException:'父对象没有默认构造函数

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

我正在编写DDD应用程序,并且试图使用LazyLoading选项。

我面临的问题是,如果我不使用LazyLoading,则可以正常运行我的应用程序,但是一旦尝试使用UseLazyLoadingProxies(),当我得到一个实体时,我会得到标题异常。就像我在stacktrace中看到的那样,似乎抛出了Castle.DynamicProxies]

enter image description here

这是我的实体:

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,但是我尝试了公共的,受保护的,内部的,并且似乎无法使其正常工作。

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

有什么想法吗? thx

我正在编写DDD应用程序,并且尝试使用LazyLoading选项。我面临的问题是,如果我不使用LazyLoading,则可以正常运行我的应用程序,但是一旦我尝试使用......>

exception lazy-loading ef-core-3.1 proxies
1个回答
0
投票

好吧,我认为我真的很愚蠢,我只是将代码转换为真正愚蠢的(贫血的模型),问题就消失了。

我发现后备字段为IList<T>,类型为IReadOnlyList<T>的属性和代理不会创建该类型。

© www.soinside.com 2019 - 2024. All rights reserved.