繁体   English   中英

代码优先 类型 '' 的属性 '' 上的 ForeignKeyAttribute 无效。 实体框架

[英]Code First The ForeignKeyAttribute on property '' on type '' is not valid. Entity Framework

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

“类型‘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; }
}

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

ForeignKey-Attribute 不会像这样工作。 如果您不关心数据库中外键的名称,则不需要此属性。 EF 将自动为导航属性创建外键。

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

[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 方的主键作为关系的外键。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM