EFCore 3 с включенным UseLazyLoadingProxies создает System.NotSupportedException: «Родитель не имеет конструктора по умолчанию - PullRequest
1 голос
/ 10 апреля 2020

Я пишу приложение DDD и пытаюсь использовать опцию LazyLoading.

Проблема, с которой я сталкиваюсь, заключается в том, что я могу запустить свое приложение в порядке, если я не использую LazyLoading, но как только я попробуйте использовать UseLazyLoadingProxies (), когда я получаю сущность, я получаю исключение заголовка. Кажется, что он брошен в 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, но я пробовал опубликовать c, защищенный, внутренний, и я могу ' Кажется, он не работает.

Единственное, что я могу сказать, это то, что модель Домена не живет в той же сборке, что и мой Контекст ... не уверен, имеет ли это отношение к проблеме ..

Есть идеи? ТНХ

1 Ответ

0 голосов
/ 10 апреля 2020

Ну, я думаю, что я действительно глуп, я просто превратил свой код в нечто действительно глупое (модель anemi c), и проблема ушла.

Я понял, что поле поддержки является IList<T> и свойство типа IReadOnlyList<T> и прокси-сервер не могут создать тип.

Ошибка исключения в этом случае была не слишком полезна, но изменила IList<T> на List<T> исправил мою проблему.

...