Отношение 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: М.