C# 为此关系配置一个主键或一组兼容的外键属性

C# 为此关系配置一个主键或一组兼容的外键属性,c#,asp.net-core,entity-framework-core,odata,C#,Asp.net Core,Entity Framework Core,Odata,尝试使用实体框架核心和OData创建RESTAPI。 我有两个模型。一个名为InvoiceModel,另一个名为InvoiceLinesModel 基本上,InvoiceModel是发票的基本信息,然后它有一个包含项目(增值税、折扣等)的行集合(InvoiceLines) 请参见以下两个模型: 发票型号 public class InvoiceModel { [ForeignKey("Id")] public Guid Id { get; set; } [ForeignK

尝试使用实体框架核心和OData创建RESTAPI。 我有两个模型。一个名为InvoiceModel,另一个名为InvoiceLinesModel

基本上,InvoiceModel是发票的基本信息,然后它有一个包含项目(增值税、折扣等)的行集合(InvoiceLines)

请参见以下两个模型:

发票型号

public class InvoiceModel
{
    [ForeignKey("Id")]
    public Guid Id { get; set; }
    [ForeignKey("Number")]
    public string Number { get; set; }
    [ForeignKey("Customer")]
    public Guid Customer { get; set; }
    public decimal SubTotal { get; set; }
    public decimal VatTotal { get; set; }
    public decimal Total { get; set; }
    public DateTime Created { get; set; }
    public DateTime Date { get; set; }
    public bool IsOpen { get; set; }
    public string YourReference { get; set; }
    [ForeignKey(nameof(InvoiceLinesModel.Number))]
    public ICollection<InvoiceLinesModel> Lines { get; set; }
}
public class InvoiceLinesModel
{
    [ForeignKey("Id")]
    public Guid Id { get; set; }
    [ForeignKey("LineNumber")]
    public int LineNumber { get; set; }

    public Guid Customer { get; set; }

    [ForeignKey("Number")]
    public string Number { get; set; }
    public string ItemCode { get; set; }
    public string ItemDescription { get; set; }
    public decimal PriceExcl { get; set; }
    public decimal PriceIncl { get; set; }
    public decimal DefaultPrice { get; set; }
    public decimal VatPercentage { get; set; }
    public decimal Quantity { get; set; }
    public decimal Discount { get; set; }
    public decimal TotalDiscount { get; set; }
    public string Instruction { get; set; }
    //public InvoiceModel Invoice { get; set; }
}
现在,在我的控制器内,我尝试从2个进程获取数据。 然后,我想用foreach将InvoiceLines添加到Invoice对象的集合中

 public IQueryable<InvoiceModel> GetInvoices()
        {
            IQueryable<InvoiceModel> Invoices = null;
            ICollection<InvoiceLinesModel> InvoiceLines = null;

            Invoices = db.Invoices.FromSql("SIP_API_MONDIA_InvoiceMain_sel");
            InvoiceLines = db.InvoiceLines.FromSql("SIP_API_MONDIA_InvoiceDetail_sel").ToList();
            foreach (var item in Invoices)
            {
                item.Lines = InvoiceLines.Where(m => m.Number == item.Number).ToList();
            }
            return Invoices;
错误:

System.InvalidOperationException:'来自的关系 带外键的“InvoiceLinesModel”到“InvoiceModel.Lines” 属性{'Number':字符串}不能以主键{'Id'为目标: Guid},因为它不兼容。配置主密钥或密钥集 “此关系的兼容外键属性。”

编辑:在我们的例子中,数字(这是一个字符串..不要问我为什么它没有不同的名称)是比较/链接的关键

正如您在控制器中看到的:

  foreach (var item in Invoices)
            {
                item.Lines = InvoiceLines.Where(m => m.Number == item.Number).ToList();
            }
  foreach (var item in Invoices)
            {
                item.Lines = InvoiceLines.Where(m => m.Number == item.Number).ToList();
            }