C# 为此关系配置一个主键或一组兼容的外键属性
尝试使用实体框架核心和OData创建RESTAPI。 我有两个模型。一个名为InvoiceModel,另一个名为InvoiceLinesModel 基本上,InvoiceModel是发票的基本信息,然后它有一个包含项目(增值税、折扣等)的行集合(InvoiceLines) 请参见以下两个模型: 发票型号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
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();
}