我如何首先从一个模型在 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; }
}
我想你的模型比 FromCity
和 ToCity
更复杂,因为我认为将这些信息存储在不同的 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!;
}
这种方法可以通过 Orders
和 FromCity
、ToCity
之间的 One-to-Many 关系解决您的问题,如下图所示:
我想从城市模型中添加两个属性:
迁移后出现此错误:
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; }
}
我想你的模型比 FromCity
和 ToCity
更复杂,因为我认为将这些信息存储在不同的 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!;
}
这种方法可以通过 Orders
和 FromCity
、ToCity
之间的 One-to-Many 关系解决您的问题,如下图所示: