2016-01-26 38 views
0

我有2类:如何先建立外键使用迁移代码(一对多的关系)

公共类Retete

{ 
    public Retete() { } 

    public int ID { get; set; } 
    public string Nume { get; set; } 
    public string Categorie { get; set; } 
    public string Grupa { get; set; } 
    public string Descriere { get; set; } 
    public string Ingrediente { get; set; } 
    public string Preparare { get; set; } 


    //Configure 1 to many relationship 
    //Foreign Key 

    [ForeignKey("GrupaIndivizi")] 
    public int GrupaID { get; set; } 

    [ForeignKey("GrupaID")] 
    public virtual GrupaIndivizi GrupaIndivizi { get; set; } 
} 

公共类GrupaIndivizi

{ 
    public GrupaIndivizi(){} 

    [Key] 
    public int GrupaID { get; set; } 
    public string NumeGrupa { get; set; } 

    public virtual ICollection<Retete> Retetes { get; set; } 
} 

和创建的表格

enter image description here

我的问题是如何使Rerutes表中的GrupaID成为外键?要在实体框架的外键

回答

0

一种方法是:钥匙的标识旁边,你需要有一个类型的对象。检查这是否工作。

[Table("Retete")] 
public class Retete 
     { 
      public Retete() { } 

      public int ID { get; set; } 
      public string Nume { get; set; } 
      public string Categorie { get; set; } 
      public string Grupa { get; set; } 
      public string Descriere { get; set; } 
      public string Ingrediente { get; set; } 
      public string Preparare { get; set; } 


      //Configure 1 to many relationship 
      //Foreign Key 

      [ForeignKey("GrupaIndivizis")] 
      public int GrupaIndiviziID { get; set; } 
      public GrupaIndivizi GrupaIndivizi { get; set; } 
     } 

我也会推荐让表更适合一些名称,不要让EF生成名称。这可以通过Table属性完成。
您的FK没有corectly产生是因为他试图绑定到一个GrupaIndivizi表,但你有GrupaIndivizis

+0

这个方法我试过,以后我在Package Manager控制台运行添加迁移,我真的收到此错误:属性“GrupaID”不能被配置为导航属性。该属性必须是有效的实体类型,并且该属性应该具有非抽象的getter和setter。对于收集属性,类型必须实现ICollection ,其中T是有效的实体类型。 – ruru

+0

从您的Retete类中删除'GrupaID'并重试 – Zippy

+0

它仍然不起作用.GrupaIndiviziID不是外键,只是表Retetes的一列。 – ruru

相关问题