如何使用实体框架将实体对象的引用移除到另一个实体?

时间:2012-03-07 20:12:37

标签: c# entity-framework

我有一个实体Locations,其主键由LongitudeLatitude组成double

从另一个实体对象我想删除Locations中对实体对象的引用,但每次我尝试将引用设置为null时,我都会得到OptimisticConcurrencyException

using (MyModelContainer context = new MyModelContainer())
{
    Note note = context.Notes.Single(n => n.NID == NoteUpdate.NID);
    note.LocationReference.Load();
    note.LocationReference = null;
    context.saveChanges();
}

但它不起作用。与note.LocationReference.Value = null相同。

如何将引用设置为null或其默认值?

3 个答案:

答案 0 :(得分:0)

我认为目的是更新数据库,以便将注释行的位置列设置为null,因此分离不起作用。我认为在上面的代码中用note.LocationReference = null;替换note.Location = null;应该有效

答案 1 :(得分:0)

您是否尝试删除引用?我相信这会删除父行,但是如果你传入绑定到注释的对象,它会很奇怪它是否只删除了引用。

context.DeleteObject(note.LocationReference);

通常,乐观并发错误意味着自上次加载对象以来该值已发生更改,但听起来这不是问题。但是,为了验证,没有人可以在运行代码之间修改它,对吧?

最后,您是否尝试过设置状态?

context.Entry(note).State = EntityState.Added

答案 2 :(得分:0)

在Note类中,添加:

public int? LocationReferenceId {get; set;}

要删除引用,请执行以下操作:

Note.LocationReferenceId = null;

然后将Note对象保存回db

我认为应该这样做。