如何处理没有其他关系的实体中的嵌套对象
Posted
技术标签:
【中文标题】如何处理没有其他关系的实体中的嵌套对象【英文标题】:How to handle nested object in Entities that have no other relation 【发布时间】:2021-10-18 13:03:09 【问题描述】:考虑以下类:
public class Country
public string Name get;set;
public Coordinate Coordinate get;set;
public class Coordinate
public Latitude get;set;
public Longitude get;set;
现在,当我创建迁移时,它会创建两个表:Country
和 Coordinate
,并在两个表之间进行映射。
Table: Country
[id, name, coordinateId]
Table: Coordinate
[id, latitude, longitude]
这感觉很阴暗,因为坐标与其他任何东西都没有关系。它也可以存储在同一个表中。
我觉得更好的方法是使用 1 张表 [Country]
包含所有字段:
Table: Country
[id, name, coordinate_latitude, coordinate_longitude]
在 EF 中是否可以接受有很多嵌套对象的表,其中填充了仅由其主要父对象使用的数据?或者有没有一种更有效的“扁平化”对象的方法?
【问题讨论】:
你使用什么 EFCore? @DmitriBodiu 3.1.20 看看我的回答,应该可以的 【参考方案1】:https://docs.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/implement-value-objects
有一个示例如何将值对象设置为主表中的列:
orderConfiguration.OwnsOne(p => p.Address) .Property(p=>p.Street).HasColumnName("ShippingStreet");
orderConfiguration.OwnsOne(p => p.Address) .Property(p=>p.City).HasColumnName("ShippingCity");
【讨论】:
谢谢,这行得通。所以谷歌的术语是“拥有的实体”。【参考方案2】:为什么不使用SqlGeography
public class Country
public string Name get;set;
public SqlGeography Coords get;set;
否则,无论如何你都可以扁平化课程。
public class Country
public string Name get;set;
public double Latitude get;set;
public double Longitude get;set;
【讨论】:
坐标是嵌套对象的示例。它不一定是坐标。 好吧,这让我很困惑。所以@DmitriBodiu 的答案是最好的。以上是关于如何处理没有其他关系的实体中的嵌套对象的主要内容,如果未能解决你的问题,请参考以下文章
如何处理一对多关系中的嵌套 mongoose 查询和异步问题?