【问题标题】:Validation error in Entity Framewok while creating foreign key创建外键时实体框架中的验证错误
【发布时间】:2021-01-16 18:50:01
【问题描述】:

我有 2 张桌子。一个是Preference,另一个是Profile。配置文件可以有 0 或 1 个首选项。我正在尝试在 Preference 中创建一个名为 Profile_id 的外键列,但它给了我验证错误:这是例外:

"在模型过程中检测到一个或多个验证错误 generation:\r\n\r\nPreference_Profiles_Source: : 多重性不是 在关系中的角色“Preference_Profiles_Source”中有效 'Preference_Profiles'。因为从属角色属性不是 关键属性,多重性的上限 从属角色必须是“*”。\r\n"

这是我的代码

public class Profile
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Required]
        public virtual int Id { get; set; }
        [Required]
        public virtual string name { get; set; }
        [Required]
        public virtual string profile_pic { get; set; }
        public virtual Watchlist Watchlist { get; set; }

        public virtual Preference Preference { get; set; }
    }

这里是为了偏好:

 public class Preference
    {

        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Required]
        public virtual int Id { get; set; }
        public virtual Language Language { get; set; }
        public virtual Type Type { get; set; }

        public virtual Genre Genre { get; set; }

        [Required]
        public virtual Profile Profiles { get; set; }

        public virtual Classifications Classifications { get; set; }

        [ForeignKey("Profiles")]
        public virtual int Profile_id { get; set; }

    }

我真的不知道是什么导致了这个问题,有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: c# sql database entity-framework


    【解决方案1】:

    EF 认为您需要 1-1 关系,这要求外键属性是键属性。但我猜这不是你真正想要的。试试这样的:

    public class Profile
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Required]
        public virtual int Id { get; set; }
        [Required]
        public virtual string name { get; set; }
        [Required]
        public virtual string profile_pic { get; set; }
        public virtual ICollection<Preference> Preferences { get; } = new HashSet<Preference>();
    }
    public class Preference
    {
    
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Required]
        public virtual int Id { get; set; }
    
        public virtual Profile Profile { get; set; }
    
        [ForeignKey("Profile")]
        public virtual int Profile_id { get; set; }
    
    }
    

    【讨论】:

      【解决方案2】:

      您需要使 Profile_id 可以为空:

      public virtual int? Profile_id { get; set; }
      

      【讨论】:

        【解决方案3】:

        可能是命名约定 尝试将配置文件更改为配置文件(它不是为什么要编写配置文件的列表?)

        你为什么把 required 属性放在导航属性上?

        【讨论】:

        • 仍然给我错误,我尝试更改它。
        • 您是否删除了必需的属性?
        • 是的,我确实删除了它。
        • 添加外键或添加迁移时是否出错?
        • 我使用的是DropCreateDatabaseAlways,所以每次程序运行时它都会创建一个新表。我相信是因为添加了外键
        猜你喜欢
        • 1970-01-01
        • 2019-01-13
        • 1970-01-01
        • 1970-01-01
        • 2019-03-13
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多