Web 中代码优先的外键 API

Foreign keys with Code First in a Web API

非常简单的问题,但看起来我正在尝试在两个模型之间实现简单的一对多关系。

到目前为止,我所拥有的是: 一个产品 class :

public class Products
{
    public long Id { get; set; }
    public long Code { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DateModified { get; set; }
    public Boolean Reviewed { get; set; }
    [ForeignKey("BundleId")]
    public int BundleId { get; set; }
    public virtual Bundles Bundle { get; set; }
}

缺陷 class 看起来像这样:

public class Defects
{
    public long Id { get; set; }
    public String Description { get; set; }
    public String Picture { get; set; }
    public DateTime DateCreated { get; set; }
    [ForeignKey("ProductId")]
    public int ProductId { get; set; }
    public Products Product { get; set; }
    [ForeignKey("UserId")]
    public int UserId { get; set; }
    public virtual Users User { get; set; }
}

我认为我不需要在 Products class 中添加 ICollection of Defects 因为它是 "simple" 一对一许多关系,此代码足以在 Defects class 中获取产品 ID(我不需要更多)。

但是,我当然遇到了一个例外:

The property 'ProductId' cannot be configured as a navigation property. The property must be a valid entity type and the property should have a non-abstract getter and setter

我该如何解决这个问题? 我的两个外键可能做错了,但由于我声明了外键的名称,所以我认为它已经足够了。

感谢您的关注。

这就是你们的关系可以提炼出来的。
请注意,ForeignKey 注释应用于具有键名 属性 的导航 属性。

如果你建立一对多的关系 - 那么 ICollection 是绝对必要的。
否则 "many"

   public class Products
    {
        public int Id { get; set; }

        public virtual List<Defects> Bundle { get; set; }
    }


    public class Defects
    {
        public long Id { get; set; }


        public int ProductId { get; set; }

        [ForeignKey("ProductId")]
        public Products Product { get; set; }
    }

FK 也可以应用于 属性 键。但在那种情况下,您必须将相关实例的名称 class 放在那里

    public class Defects
    {
        public long Id { get; set; }


        [ForeignKey("Product")]
        public int ProductId { get; set; }


        public Products Product { get; set; }
    }