关系 xx 未加载,因为类型 xx 不可用

The relationship xx was not loaded because the type xx is not available

当我尝试为我的代码优先上下文创建迁移时,出现此错误:

错误:关系 'Exiled_Trader.Models.TradeContexts.Item_AdditionalProperties' 未加载,因为类型 'Exiled_Trader.Models.TradeContexts.Property' 不可用。

我的项目模型与 属性 table 有不止一对多的关系,这些关系用于几个不同的属性。这是它的样子:

 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 fluent 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);

谁能告诉我我错过了什么以及为什么我会收到此错误? Additional Properties、Properties、NextLevelRequirements 和 Requirements 都使用相同的模型 class,这是问题所在吗?我是否应该为每个属性制作不同的模型 class,即使它们是相同的?我应该改用复合键吗?

尝试删除构造函数以及 Item class 中相同类型的多个导航属性。 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:M 关系。