【问题标题】:Entity structure misinterpreting a class as a context entity实体结构将类误解为上下文实体
【发布时间】:2022-01-28 04:31:40
【问题描述】:

在我的项目中,我有一个 Client 实体。该实体使用 Address 类,而该类又不是实体。

public class Client{
  public int Id { get; set;}
  public string Name { get; set;}
  public Address Address { get; set;}
}

public class Address {
  public string City { get; set;}
  public string Country { get; set;}
}

在 Address 类中输入的数据将被持久化在 Client 实体中。地址类仅用于代码组织和复用。

上传实体框架核心上下文时出现以下错误:

实体类型“地址”需要定义主键。如果 您打算使用无密钥实体类型,请在 'OnModelCreating'。有关无密钥实体类型的更多信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2141943.

地址未在上下文中作为 DbSet 映射,但实体尝试映射它。为什么?有没有人经历过这种情况?

我如何让实体明白 Address 类只是 Customer 类的补充,而不是实体本身。

【问题讨论】:

  • 你要使用数据库吗?你要如何保存地址?
  • 地址类的字段保存在客户端实体中。地址类仅用于代码组织。

标签: sql-server entity-framework-core


【解决方案1】:

地址未在上下文中作为 DbSet 映射,但实体尝试映射它。为什么?

因为是Entity的属性,所以会默认映射。

按照惯例,在您的 DbSet 属性中公开的类型 上下文作为实体包含在模型中。实体类型 还包括在 OnModelCreating 方法中指定的任何 通过递归浏览导航找到的类型 其他已发现实体类型的属性

Entity Types

将其标记为Owned Type,它将映射到拥有实体表上的列。

【讨论】:

  • 正确。需要使用OwnsOne 映射地址类。来自微软网站的文档:linkThanks
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多