启用了 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>
解决了我的问题。
我正在编写一个 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>
解决了我的问题。