我有一个名为“Document”的数据模型,如下所示:
public class Document
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
//[ForeignKey("Id")]
public List<DocumentLine> Lines { get; set; }
public DateTime PurchaseDate { get; set; }
public double TotalValue { get; set; }
}
它包含一个子对象“DocumentLines”的列表,如下所示:
public class DocumentLine
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int LineId { get; set; }
public int DocumentId { get; set; }
//public virtual Document ParentDocument { get; set; }
public string ItemName { get; set; }
public double ItemPrice { get; set; }
public double ItemId { get; set; }
public int Quantity { get; set; }
}
我为解决方案中的每个 DataModel 创建了一个存储库,因此我有一个 documentRepository 和一个 documentLinesRepository。
目前,我在创建一个包含其子 documentLines 列表的新文档时遇到了几个错误。
如果我想在数据库中创建一个新文档,首先执行以下代码:
public async Task<Document> CreateNewAsync()
{
Document document = new Document()
{
Lines = null,
PurchaseDate = DateTime.Now,
};
var newDocument = await databaseContext.Documents.AddAsync(document);
await databaseContext.SaveChangesAsync();
return newDocument.Entity;
}
这段代码可以正常工作,但是现在如果我想创建一个 DocumentLine 类型的新对象并使用以下代码将其添加到数据库中:
我在应将“documentLine”添加到数据库的行中收到以下错误:
“SQLite 错误 19:‘外键约束失败’。”
首先,我看不到为“DocumentLine”类型的实例设置外键的位置。
我尝试了其他几件事,以及在每个 DocumentLine 中分配了一个类型为“Document”的父级实例,但这也给了我一个错误。
它应该如何工作
我的问题是如何正确实现将文档保存在数据库中并且每行单独保存(来自 documentLinesRepository)的行为,并且仅在设置所有行的最后,文档将在包含DocumentLines 对象的完整列表。
如果这是一个初学者问题,请提前抱歉,但直到现在我尝试解决这个错误几天,但我没有找到谷歌 atm 的正确解决方案。
侃侃无极
相关分类