微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 作为关系的外键。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。