Отношение xx не было загружено, потому что тип xx недоступен

Когда я пытаюсь создать миграцию для моего первого контекста кода, я получаю эту ошибку:

Ошибки: отношение 'Exiled_Trader.Models.TradeContexts.Item_AdditionalProperties' не было загружено, поскольку тип 'Exiled_Trader.Models.TradeContexts.Property' недоступен.

Моя модель элемента имеет более одного отношения "многие ко многим" к таблице свойств, которые используются в нескольких различных свойствах. вот как это выглядит:

 public class Item
    {
        public Item()
        {
            AdditionalProperties = new List<Property>();
            NextLevelRequirements = new List<Property>();
            Properties = new List<Property>();
            Requirements = new List<Property>();

        }

            public int ItemId { get; set; }
            public List<Property> AdditionalProperties { get; set; } 
            public List<Property> NextLevelRequirements { get; set; }
            public List<Property> Properties { get; set; }
            public List<Property> Requirements { get; set; }
        }

Вот модель собственности:

public class Property
{
public Property()
        {
            Values = new List<PropertyValue>();
        }
    public int PropertyId { get; set; }
    public int ItemId { get; set; }
    public Item Item { get; set; }

    public List<PropertyValue> Values { get; set; }

    public string Name { get; set; }
    public int? DisplayMode { get; set; }
    public int? Type { get; set; }
    public int? Progress { get; set; }
}

и вот конфигурация Item беглый API:

 HasKey(i => i.ItemId);

            HasMany(i => i.AdditionalProperties)
                .WithRequired(p => p.Item)
                .HasForeignKey(p => p.ItemId);

            HasMany(i => i.Properties)
                .WithRequired(p => p.Item)
                .HasForeignKey(p => p.ItemId);

            HasMany(i => i.NextLevelRequirements)
                .WithRequired(p => p.Item)
                .HasForeignKey(p => p.ItemId);

            HasMany(i => i.Requirements)
                .WithRequired(p => p.Item)
                .HasForeignKey(p => p.ItemId);

Может кто-нибудь сказать мне, что я пропускаю и почему я получаю эту ошибку? Дополнительные свойства, свойства, NextLevelRequirements и Requirements используют один и тот же класс модели, является ли это проблемой, и следует ли мне создавать разные классы моделей для каждого из этих свойств, даже если они одинаковы? Должен ли я использовать композитные ключи вместо этого, может быть?

1 ответ

Решение

Попробуйте удалить конструкторы, а также несколько свойств навигации одного типа в вашем Item учебный класс. EF выполнит всю тяжелую работу с точки зрения создания экземпляров для ваших свойств навигации, поэтому вам не нужно этого делать. Точно так же, ваша конфигурация API будет свободно терять дополнительные определения для отношений 1:M с Property,

    public class Item
    {

        public int ItemId { get; set; }
        public virtual ICollection<Property> Properties { get; set; }

    }

    public class Property
    {
        public int PropertyId { get; set; }
        public int ItemId { get; set; }
        public string Name { get; set; }
        public int? DisplayMode { get; set; }
        public int? Type { get; set; }
        public int? Progress { get; set; }

        public Item Item { get; set; }
        public virtual ICollection<PropertyValue> Values { get; set; }
    }

Это создаст вам две таблицы - одну для Item и один для Property с отношением 1: М.

Другие вопросы по тегам