我收到此错误:“实体类型 'DisplayFormatAttribute' 需要定义主键。”

Posted

技术标签:

【中文标题】我收到此错误:“实体类型 \'DisplayFormatAttribute\' 需要定义主键。”【英文标题】:I am getting this error: "The entity type 'DisplayFormatAttribute' requires a primary key to be defined."我收到此错误:“实体类型 'DisplayFormatAttribute' 需要定义主键。” 【发布时间】:2019-10-26 11:01:52 【问题描述】:

我收到了这个错误

“实体类型'DisplayFormatAttribute'需要定义一个主键。”当我尝试运行此代码时在终端上

Dotnet ef migrations add firstMigrationAddModels

我正在使用 Entity-framework core 2.0 创建代码优先数据库迁移

我有许多模型(类),一个类继承自另一个,为了解决这个问题,我使用了实体框架核心的继承功能,称为按层次结构表 (TPH)

https://www.learnentityframeworkcore.com/inheritance

我把派生类和基类都放在了 dbcontext 的 Dbset 中

public DbSet<Person> people  get; set; 
public DbSet<Student> students  get; set; 

STUDENT 类没有 PK,因为 Person 有它。

我也有具有多对多关系的类,我通过创建桥接类解决了这个问题

错误说我需要“DisplayFormatAttribute”中的主键 但我无权访问该课程

我在我的模型中使用 Maxlength() 和 minlength() 等 DataAnotationAttributes,所以我正在以某种方式访问​​该类。

我使用的其他类型是 PhoneAttribute,EmailAddressAttribute

[MaxLength(15)]
public PhoneAttribute Phone  get; set; 
[MaxLength(254)]
public EmailAddressAttribute Email  get; set; 

【问题讨论】:

【参考方案1】:

我解决了。问题是我的电话号码和电子邮件类型属性

public PhoneAttribute Phone  get; set; 
public EmailAddressAttribute Email  get; set; 

PhoneAttribute 和 EmailAddressAttributes 没有 SQL 服务器等效类型

我把它们拿出来,分别改成int和string,就成功了

public int Phone  get; set; 
public string Email  get; set; 

【讨论】:

【参考方案2】:

您必须使用数据注释[Key] 设置您的属性之一

[Key] 实际上是您的数据表的标识符。

【讨论】:

我加了,不行。我在所有类中都有 Id 字段,因此 ef core 非常聪明,可以将其用作 PK【参考方案3】:

我解决了。问题是我的电话号码和电子邮件类型属性

public PhoneAttribute Phone get;放; 公共 EmailAddressAttribute 电子邮件 获取;放; PhoneAttribute 和 EmailAddressAttributes 没有 SQL 服务器等效类型

我把它们拿出来,分别改成int和string,就可以了

公共 int 电话 获取;放; 公共字符串电子邮件获取;放;

Т他为我工作,非常感谢你

【讨论】:

以上是关于我收到此错误:“实体类型 'DisplayFormatAttribute' 需要定义主键。”的主要内容,如果未能解决你的问题,请参考以下文章

我收到此错误 NSURLErrorDomain 错误 -999

为啥我会收到此错误:“不支持此功能(数字商品)。”?

为啥我在 django 教程中收到此模板错误?

为啥我收到此错误? KeyError:“没有”

SimpleSAML 配置错误,收到此错误。可能是啥问题?

我收到此错误:“实体类型 'DisplayFormatAttribute' 需要定义主键。”