C# 代码优先方法(asp.net mvc)中引用的表中没有主键或候选键

C# 代码优先方法(asp.net mvc)中引用的表中没有主键或候选键,c#,asp.net-mvc,C#,Asp.net Mvc,我试图将FK从Guiders表添加到InvoiceDetails表,但在尝试运行更新数据库时出现此错误: 引用的表“dbo.Guiders”中没有与外键“FK_dbo.InvoiceDetails_dbo.Guiders_GuidersID”中的引用列列表匹配的主键或候选键。 无法创建约束或索引。请参阅前面的错误 代码: 这个错误似乎是不言自明的。。。问题是什么?问题是如何解决此错误?@kfix错误表示“引用的表'dbo.Guiders'…'中没有主键或候选键”,这是真的。您的Guiders实体

我试图将FK从
Guiders
表添加到
InvoiceDetails
表,但在尝试运行
更新数据库时出现此错误:

引用的表“dbo.Guiders”中没有与外键“FK_dbo.InvoiceDetails_dbo.Guiders_GuidersID”中的引用列列表匹配的主键或候选键。
无法创建约束或索引。请参阅前面的错误

代码:


这个错误似乎是不言自明的。。。问题是什么?问题是如何解决此错误?@kfix错误表示“引用的表'dbo.Guiders'…'中没有主键或候选键”,这是真的。您的
Guiders
实体没有主键。您应该添加一个。但请检查指南表中的我的代码。它是Tablebase表中固有的,它包含的thd ID为PKYes。我们检查了您的代码。你在桌面上的身份证是不相关的。事实上,我强烈建议您删除父类,直到您了解EF存储层次结构的不同方式。但这与显示的错误无关。
InvoiceDetails
对象与
Guiders
对象相关的内容;但导游并没有相应的关系。假设它是一对多关系,那么应该有
集合InvoiceDetailses
。最好的学习方法是创建一个包含所有外键的数据库并构建模型
public class TableBase
{
    [Key]
    [Required]
    public Guid ID { get; set; }
    [Required]
    public DateTime CreateDate { get; set; }
}

public class InvoiceDetails : TableBase
{
    [Required]
    public int Qty{ get; set; }
    [Required]
    public decimal Price { get; set; }
    public Guid InvoicesID { get; set; }
    public virtual Invoices Invoices { get; set; }
    public Guid GuidersID  { get; set; }
    public virtual Guiders  Guiders { get; set; }
}

public class Guiders : TableBase
{
    public Guid GuidersID { get; set; }
    public virtual Guiders Guiders { get; set; }
    public Guid? ToursID { get; set; }
    public virtual Tours Tours { get; set; }
}