gpt4 book ai didi

c# - .NET 中的 EntityFramework - 将子实体添加到现有父实体时,正在验证/添加父实体

转载 作者:太空宇宙 更新时间:2023-11-03 12:30:20 26 4
gpt4 key购买 nike

我正在将 EntityFramework 与 .NET 结合使用,并且我有实体发票(父)和收据(子)等。它们的建模如下所示:

public class Invoice
{
public int InvoiceID { get; set; }

[Required(ErrorMessage = "Field Date is mandatory for the invoice.")]
public DateTime Date { get; set; }
...
public virtual ICollection<Receipt> Receipts { get; set; }
}

public class Receipt
{
public int ReceiptID { get; set; }
...
public int? InvoiceID { get; set; }
public Invoice Invoice { get; set; }
}

我已经在数据库中添加了发票。问题是当我尝试为其添加收据时。为此,我使用了一个 FormView,其属性为 ItemType="Models.Receipt", ValidateRequestMode="Enabled", InsertMethod="AddReceipt":

public void AddReceipt(Models.Receipt receiptObj)
{
receiptObj.InvoiceID = intInvoiceID; //from POST
if (ModelState.IsValid)
{
var _db = new Models.InvoiceContext();
_db.Receipts.Add(receiptObj);
_db.Entry(receiptObj).State = System.Data.Entity.EntityState.Added;
_db.SaveChanges();
}
}

ModelState.IsValid 返回 false。错误消息是“发票必须填写字段日期”。 - 但我不是要添加发票!当我在 Debug 中检查“ModelState”时,在 ModelState.Keys 中我看到值“Invoice.InvoiceNumber”和“Invoice.InvoiceDate”...?

如果我尝试加载发票

receiptObj.Invoice= GetInvoice(intInvoiceID);

我仍然遇到相同的验证错误,即使当我在 Debug invoice.Bill 中检查时,我发现它已正确加载 - 包括日期字段。 (但是以这种方式获取发票是不行的,因为当我解决验证问题时我会收到另一个错误,因为我在调用 GetInvoice(intInvoiceID) 时使用了不同的上下文并且我无法将发票对象附加到两个不同的上下文。 )

我坚持了一段时间,所以非常感谢任何帮助。

最佳答案

我找到问题了!我发布它以防其他人遇到它。

在我用来插入/更新收据的 FormView 中,我有一个显示发票编号的标签。

<asp:Label ID="lblInvoiceNumber_edit" Text='<%# Bind("Invoice.InvoiceNumber") %>' runat="server"></asp:Label>

由于绑定(bind),每次我尝试插入/更新收据时,上下文也会尝试插入新发票 - 但由于对于这个新发票,只有 InvoiceNumber 字段被绑定(bind),所有其他字段都为空- 这就是发票日期必填字段验证失败的原因。

感谢大家的关注和建议。

关于c# - .NET 中的 EntityFramework - 将子实体添加到现有父实体时,正在验证/添加父实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43063670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com