簡體   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