Web API中带有Code First的外键

问题描述 投票:1回答:1

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

到目前为止,我所拥有的是:产品类别:

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; }
}

缺陷类如下所示:

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类添加DefectsICollection ,因为它是“简单”的一对多关系,并且此代码足以在Defects类中获取产品的ID(我不需要更多)。

但是,我当然会例外:

无法将属性“ ProductId”配置为导航属性。 该属性必须是有效的实体类型,并且该属性应具有非抽象的getter和setter

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

感谢您的关注。

c# asp.net asp.net-web-api foreign-keys foreign-key-relationship
1个回答
2
投票

这就是您的关系可以提炼的。
请注意,ForeignKey注释将以key属性的名称应用于导航属性。

如果您建立一对多关系-那么ICollection是绝对必要的。
否则“很多”在哪里

   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也可以应用于key属性。 但是在这种情况下,您必须在其中放置相关类的实例的名称

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


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


        public Products Product { get; set; }
    }
© www.soinside.com 2019 - 2024. All rights reserved.