当前位置: 首页 > 知识库问答 >
问题:

复杂类型需要主键

东郭凯捷
2023-03-14

我有一个对象,其中包含另一个对象类型的属性,我想将其视为复杂类型。

public class Location : IModule
{
    public string Id { get; set; }
    public Coordinate Coordinate { get; set; }
}

[ComplexType]
public class Coordinate
{
    public string Latitude { get; set; }
    public string Longitude { get; set; }
}

在添加迁移时,我遇到了需要主键的问题(这正是我想要防止的)。

实体类型坐标需要定义主键。

编辑

出于性能原因,我希望属性存储为Coordinate_LatitudeCoordinate_Longitute,而不是对另一个表的引用。

共有2个答案

云瑞
2023-03-14

您需要定义一个键,使其工作。这就是实体框架的工作方式,实体框架需要知道在进行更新或删除操作时跟踪对象的关键点。如果不想手动插入它,可以将其声明为标识列以自动递增。类似这样:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CoordinateKey { get; set; }

或使用Fluent API:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Coordinate>().HasKey(u => u.CoordinateKey);
    modelBuilder.Entity<Coordinate>().Property(c => c.CoordinateKey)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}

编辑:似乎要将坐标类视为未映射的类。您可以使用NotMapped属性。查看以下问题以了解如何操作:

实体框架代码优先:如何忽略类

余阳秋
2023-03-14

基于这个问题(如何在Entity Framework Core 2/C#中实现简单的“复杂类型”?),我找到了答案:拥有的实体类型可以发挥作用。

public class Location : IModule
{
    public string Id { get; set; }
    public Coordinate Coordinate { get; set; }
}

[Owned]
public class Coordinate
{
    public string Latitude { get; set; }
    public string Longitude { get; set; }
}

这将创建一个包含属性Id、坐标经度、坐标经度的表。

 类似资料:
  • 问题内容: 我需要哪些键中的一个或类,并且其值是这两个类中的一个,的对象列表 分别 。 例如: 我试过了,但是没有编译。 确实可以编译,但是在这种情况下不应该同时编译大小写和案例。 可能吗? 问题答案: 我认为不可能在类型中对此进行编码,我会使用自定义类来实现 只要您不将参考泄漏到此类之外,就可以在此处禁止显示警告。

  • 问题是如何使用对象类型发送Header,而不是HTTPClient声明中提供的HttpHeaders。 我在VS代码中得到的错误信息如下所示 “{headers:GetLoggedInUserHeaderRequestParam;}”类型的[ts]参数不可分配给“{headers?:HttpHeaders{[Header:string]:string string[];};};”类型“的参数;”观

  • time 包提供了时间的显示和计量用的功能。日历的计算采用的是公历。提供的主要类型如下: Location 代表一个地区,并表示该地区所在的时区(可能多个)。Location 通常代表地理位置的偏移,比如 CEST 和 CET 表示中欧。下一节将详细讲解 Location。 Time 代表一个纳秒精度的时间点,是公历时间。后面会详细介绍。 Duration 代表两个时间点之间经过的时间,以纳秒为单

  • 我正在尝试用Spring Boot开发一个CRUD web应用程序。我将Hibernate用于我的DAO部分。当我尝试午餐我的主应用程序,我收到以下错误消息: 接口客户端DAO: 类ClienteDAOImpl 类ClienteController: pom.xml:

  • 在另一个项目中实现之前,我一直试图按照这里的教程设置演示,以帮助我理解本地机器上的SSO。我遇到了一个使我陷入困境的问题。我收到错误通知我添加一个bean。请让我知道我缺少了什么代码。我无法使程序运行。 文件系统树 authApplication.java 应用程序.属性 给出错误(不是运行的全部控制台输出,但这是错误)

  • 数据-我使用XML中的许多附加列获取此类数据,并使用com。databricks spark-xml\u 2.11库,用于将xml数据转换为数据帧。 要求-必须从数组(struct)类型或列custom\u属性转换数据。示例中的custom\u属性,如示例输出所示。My struct有三个字段,分别命名为“\u VALUE”、“属性\u id”、“值”。我需要将属性id转换为列名称,数据为-检查“