【问题标题】:Foreign key invalid with Entity Framework实体框架的外键无效
【发布时间】:2015-04-10 23:35:54
【问题描述】:

所以我试图用外键创建一个表,但它总是说它找不到外键。代码如下:

 public class Tecnologies
    {
        [Key]
        public int TecId { get; set; }
        [Required]
        public String Name { get; set; }
    }

这个可行,然后我尝试创建这个:

 public class UserTecnologies
    {
        [Key]
        public int UserTecId { get; set; }
        [ForeignKey("Id")]
        public UserProfile User { get; set; }
        [ForeignKey("TecId")]
        public virtual Tecnologies Tecnology { get; set; }
        [Required]
        public int Rating { get; set; }
    }

它给了我错误:

类型“ESW_CloddOffice.Models.UserTecnologies”的属性“Tecnology”上的 ForeignKeyAttribute 无效。在依赖类型“ESW_CloddOffice.Models.UserTecnologies”上找不到外键名称“TecId”。 Name 值应该是一个逗号分隔的外键属性名称列表。

名字是正确的,我错过了什么?

【问题讨论】:

  • 需要注意的是,Tecnologies 似乎拼写错误。您指的是技术吗?

标签: c# sql sql-server entity-framework


【解决方案1】:

好的,我发现我做错了什么。这是正确的代码:

  public class UserTecnologies
    {
        [Key]
        public int UserTecId { get; set; }
        [ForeignKey("UserProfile")]
        public virtual int UserProfileId { get; set; }
        [ForeignKey("Tecnology")]
        public virtual int TecnologyId { get; set; }

        public virtual Tecnologies Tecnology { get; set; }
        public virtual UserProfile UserProfile { get; set; }

        [Required]
        public int Rating { get; set; }
    }

以错误的方式创建外键。

【讨论】:

    【解决方案2】:

    ForeignKey 属性要求实体上的实际属性与您传入的名称匹配。它不只是告诉 EF 在数据库级别调用什么键。

    您要么需要实际添加一个TecId 属性:

    public int TecId { get; set; }
    

    或者使用流畅的配置,而不是:

    modelBuilder.Entity<UserTechnologies>() 
    .HasRequired(c => c.Technology)
    .WithMany() 
    .Map(m => m.MapKey("TecId"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多