实体框架中的ForeignKey声明

时间:2014-03-29 15:38:11

标签: c# entity-framework

我的ForeignKey有问题。

错误:类型为“mvcCristal.Models.Almacen”的属性“co_art”上的ForeignKeyAttribute无效。在依赖类型'mvcCristal.Models.Almacen'上找不到导航属性'Articulo'。 Name值应该是有效的导航属性名称。

我的班级声明:

public class Articulo
{
    [Required]
    public string co_art { get; set; }
    public string des_art { get; set; }
    public string modelo { get; set; }    
    public string co_lin { get; set; }
    public string co_subl { get; set; }
    public string co_cat { get; set; }
    public string co_col { get; set; }
    [ForeignKey("co_art")]
    public ICollection<Almacen> Almacenes { get; set; }
}

public class Almacen
{
    [Key, Column(Order = 0)]
    public string co_alma { get; set; }
    public string des_alm { get; set; }
    [Required, ForeignKey("Articulo"), Column(Order = 1)]
    public string co_art { get; set; }
    public double stock_act { get; set; }
}

有任何帮助吗?谢谢;我是EF的新人。

2 个答案:

答案 0 :(得分:0)

您的注释看起来不正确

您似乎希望使用注释关联一对多关系。

Articulo 1 <--> * Almacen

键和外键的类型应为int。

我建议您按照教程了解更多有关注释的内容,例如

您也可以使用流畅的api而不是注释

答案 1 :(得分:0)

您获得的例外情况应该指向正确的方向,因为它明确说明了问题。它说,&#34;导航属性&#39; Articulo&#39;没有找到......&#39; ... Almacen&#39;。 Name值应该是有效的导航属性名称。&#34;

好的,所以外键的名称值(即Articulo)必须是Almacen上的导航属性,所以让我们这样做。

public class Almacen
{
    [Key, Column( Order = 0 )]
    public string co_alma { get; set; }
    public string des_alm { get; set; }
    [Required, ForeignKey( "Articulo" ), Column( Order = 1 )]
    public string co_art { get; set; }
    public double stock_act { get; set; }
    public Articulo Articulo { get; set; }
}

在这样做后,我又得到了另一个错误,即co_art需要成为Articulo上的密钥,所以我补充说。

public class Articulo
{
    [Required]
    [Key]
    public string co_art { get; set; }
    public string des_art { get; set; }
    public string modelo { get; set; }
    public string co_lin { get; set; }
    public string co_subl { get; set; }
    public string co_cat { get; set; }
    public string co_col { get; set; }
    [ForeignKey( "co_art" )]
    public ICollection<Almacen> Almacenes { get; set; }
}

那时一切似乎都很开心。