模型验证错误:实体类型未定义键.定义此实体类型的键

本文关键字:实体 类型 定义 验证 未定义 错误 模型 | 更新日期: 2023-09-27 18:31:16

我将模型的属性从 string 更改为 CultureInfo ,现在当我尝试加载任何 CRUD 视图(除了 Create 表单)时出现此错误。

错误:

One or more validation errors were detected during model generation:
MyProject.Models.CultureInfo: : EntityType 'CultureInfo' has no key defined. Define the key for this EntityType.
MyProject.Models.DateTimeFormatInfo: : EntityType 'DateTimeFormatInfo' has no key defined. Define the key for this EntityType.
CultureInfoes: EntityType: EntitySet 'CultureInfoes' is based on type 'CultureInfo' that has no keys defined.
DateTimeFormatInfoes: EntityType: EntitySet 'DateTimeFormatInfoes' is based on type 'DateTimeFormatInfo' that has no keys defined.

型:

namespace MyProject.Models
{
    public class Project
    {
        public Project()
        {
            Sites = new List<Site>();
        }
        [Key]
        public int Id { get; set; }
        [Required]
        [DisplayName("Name")]
        public string Name { get; set; }
        [Required]
        [DisplayName("Culture")]
        [UIHint("ProjectCulture")]
        public CultureInfo Culture { get; set; }
        // (...)
    }
}

Application_Start()

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ProjectDbContext>());

查看具有相同错误的类似问题,我还没有找到适合我的解决方案。我假设使用实体框架映射CultureInfo存在问题,因为该问题仅在我更改此属性的类型后出现,但是如何在不将其更改回来的情况下解决此错误?

模型验证错误:实体类型未定义键.定义此实体类型的键

通过定义

public virtual CultureInfo Culture { get; set; }

指示 EF 您有一个名为 CultureInfos 的相关表:公共虚拟属性的 EF 约定是该属性是导航属性。

应继续将 CultureInfo.Name 存储为字符串,然后提供一个 getter 属性来检索相应的 CultureInfo 对象。

public string CultureName {get; set; }
public CultureInfo Culture {
    get { return new CultureInfo(CultureName); }
}

在定义主键的属性之前定义[Key],例如

[Key]
public int UserID { get; set; }