我如何首先从一个模型在 EF 代码中的模型中添加 tow 属性?

How can i add tow property in my model in EF code first from one model?

我想从城市模型中添加两​​个属性:

迁移后出现此错误

Unable to determine the relationship represented by navigation 'City.Orders' of type 'ICollection'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.

这是我的代码:

public class Order
{
    public virtual City FromCity { get; set; }
    public virtual City ToCity { get; set; }
}

public class City
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Order> Orders { get; set; }
}

我想你的模型比 FromCityToCity 更复杂,因为我认为将这些信息存储在不同的 table 中不是一个好主意。然而,您可以在这种情况下使用继承。

默认使用 table-per-hierarchy (TPH) 模式映射 inheritance in EF。 TPH 将层次结构中所有类型的数据存储在单个 table.

但是,对于您的方案,您可以有一个包含所有相关属性的基 class。

public class CityBase
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
}

然后假设根据您的场景需要两个实体:

public class FromCity : CityBase
{
    public virtual ICollection<Order> Orders { get; set; } = null!;
}
public class ToCity : CityBase
{
    public virtual ICollection<Order> Orders { get; set; } = null!;
}

以及订单实体:

public class Order
{
    public int Id { get; set; }
    public string OrderTitle { get; set; } = string.Empty;
    public virtual FromCity FromCity { get; set; } = null!;
    public virtual ToCity ToCity { get; set; } = null!;
}

这种方法可以通过 OrdersFromCityToCity 之间的 One-to-Many 关系解决您的问题,如下图所示: