Code First 类型 '' 上的属性 '' 上的 ForeignKeyAttribute 无效实体框架

问题描述

我正在尝试创建代码首先接近具有不同外键的用户表,但它给了我以下消息的错误

“类型 'EFNetflixAssignment.User' 上的属性 'discount_id' 上的 ForeignKeyAttribute 无效。在依赖类型 'EFNetflixAssignment.discount' 上找不到外键名称 'discounts'。名称值应以逗号分隔外键属性名称列表。"

这是我的用户代码

{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [required]
    public virtual int Id { get; set; }

    [required]
    public virtual bool Status { get; set; }

    [required]
    [MaxLength(255)]
    public virtual string Email { get; set; }

    [required]
    [MaxLength(255)]
    public virtual string Password { get; set; }

    [required]
    public virtual List<Payment_type> Payment_Types { get; set; }

    [required]
    public virtual bool Activated { get; set; }

    [required]
    [ForeignKey("discounts")]
    public virtual List<discount> discount_id { get; set; }
}

这是折扣码

public class discount
{
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [required]
        public virtual int Id { get; set; }

        [required]
        [MaxLength(255)]
        public virtual string discount_type { get; set; }

        [required]
        public virtual decimal discount_amount { get; set; }
}

有人可以帮我解决这个问题吗?

解决方法

外键属性不会像这样工作。 如果你不关心数据库中外键的名称,那么你就不需要这个属性。 EF 会自动为导航属性创建外键。

如果要指定此键的名称,则需要用户类中的另一个属性,该属性保存外键,然后您可以通过两种可能的方式连接这两个属性:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Required]
public virtual int Id { get; set; }

[Required]
public virtual bool Status { get; set; }
[Required]
[MaxLength(255)]

public virtual string Email { get; set; }
[Required]
[MaxLength(255)]
public virtual string Password { get; set; }

[Required]
public virtual List<Payment_type> Payment_Types { get; set; }

[Required]
public virtual bool Activated { get; set; }

[Required]
[ForeignKey("Discounts")]
public List<int> Discount_Ids { get; set; }

[Required]
public virtual List<Discount> Discounts { get; set; }

或者像这样:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Required]
public virtual int Id { get; set; }

[Required]
public virtual bool Status { get; set; }
[Required]
[MaxLength(255)]

public virtual string Email { get; set; }
[Required]
[MaxLength(255)]
public virtual string Password { get; set; }

[Required]
public virtual List<Payment_type> Payment_Types { get; set; }

[Required]
public virtual bool Activated { get; set; }

[Required]
public List<int> Discount_Ids { get; set; }

[Required]
[ForeignKey("Discount_Ids")]
public virtual List<Discount> Discounts { get; set; }

这是因为每当您想使用数据注释为外键设置特定名称时,您都需要为该键添加一个属性并将其与导航属性连接。

但请注意,在您的数据库中,外键将设置在折扣表中,因为在一对多关系中,多方表始终采用 1- 的主键side 作为关系的外键。

希望这能解决您的问题,如果您有任何其他问题,请告诉我:)