c# - Code First 类型 '' 上的属性 '' 上的ForeignKeyAttribute 无效。 Entity Framework

标签 c# database entity-framework frameworks

我试图首先创建代码来访问具有不同外键的用户表,但它给了我错误消息:

"The ForeignKeyAttribute on property 'discount_id' on type 'EFNetflixAssignment.User' is not valid. The foreign key name 'Discounts' was not found on the dependent type 'EFNetflixAssignment.Discount'. The Name value should be a comma separated list of foreign key property names."

这是我的用户表代码

{
    [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 将自动为导航属性创建外键。

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

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

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

关于c# - Code First 类型 '' 上的属性 '' 上的ForeignKeyAttribute 无效。 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65748945/

相关文章:

c# - 使用 SetOrdinal 向 DataTable 添加列

c# - 乌姆布拉科。在控制台应用程序中获取节点的 url

database - Salesforce 记录类型和机会阶段关系数据库位置

sql-server - 在 SQL Server 表中匹配具有可变数量的前导零的字段

c# - 为什么我的 ClickOnce 应用程序可能会尝试连接到 localdb?

mysql - db.Database.SqlQuery 原始数据返回存储过程名称和参数

c# - 如何更快地取消任务

2 个表的 SQL 查询百分比

c# - EntityFramework - 将复杂属性映射到 json(字符串)列

c# - 如何将 byte[] 转换为 varchar?