[英]Updating or Adding a Child Record on an Existing Row in EntityFramework
I have an existing row in SQL called OrderLine.我在 SQL 中有一个名为 OrderLine 的现有行。 This links (but does not have to) OrderLineCustomFields.此链接(但不是必须)OrderLineCustomFields。 An OrderLine can be inserted with no OrderLineCustomFields object but could have OrderLineCustomFields at a later date.可以在没有 OrderLineCustomFields 对象的情况下插入 OrderLine,但可以在以后插入 OrderLineCustomFields。 I don't receive any errors but when the OrderLine is saved, the generated column (OrderLineCustomFields_OrderLineCustomFieldsId) doesn't get stamped with the new ID created thus I have no link between the 2 tables.我没有收到任何错误,但是当保存 OrderLine 时,生成的列 (OrderLineCustomFields_OrderLineCustomFieldsId) 没有被创建的新 ID 标记,因此我在 2 个表之间没有链接。
If I create a new OrderLine (not an existing row), everything is inserting correctly.如果我创建一个新的 OrderLine(不是现有的行),一切都正确插入。
public class OrderLine
{
public int OrderLineId { get; set; }
public virtual OrderLineCustomFields OrderLineCustomFields { get; set; }
}
public class OrderLineCustomFields
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int OrderLineCustomFieldsId { get; set; }
public string SomeValue { get; set; }
}
Sample New object:示例新对象:
var ol = new OrderLine();
ol.OrderLineId = 1;
ol.OrderLineCustomFields = new OrderLineCustomFields();
ol.OrderLineCustomFields.SomeValue = "NewValue";
Repository code:存储库代码:
var olEntity = context.OrderLines?
.Where(x => x.OrderLineId == ol.OrderLineId)
.FirstOrDefault();
var olCustomEntity = context.OrderLineCustomFields?
.Where(x => ol.OrderLineCustomFields.OrderLineCustomFieldsId == x.OrderLineCustomFieldsId)
.FirstOrDefault();
if (olCustomEntity == null) //if there isn't a record already, then add it.
{
context.Entry(ol.OrderLineCustomFields).State = EntityState.Added;
}
else //else, update the record with new data
{
ol.OrderLineCustomFields.OrderLineCustomFieldsId = olCustomEntity.OrderLineCustomFieldsId;
context.Entry(olCustomEntity).CurrentValues.SetValues(ol.OrderLineCustomFields);
}
//Save the orderLine
context.Entry(olEntity).CurrentValues.SetValues(ol);
context.SaveChanges();
I was able to get it working.我能够让它工作。 I didn't let EF know that the OrderLine was modified:我没有让 EF 知道 OrderLine 被修改了:
context.Entry(olEntity).State = EntityState.Modified;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.