无法管理将多对一关联设置为null并保存实体

时间:2011-07-03 12:21:15

标签: entity-framework entity-framework-4.1 poco

说我有:

public class Event {
   public int EventID { get; set; }
   ...
   public Sponsor Sponsor { get; set; }
}


public class Sponsor { get; set; }
   public int SponsorID { get; set; }
   ...
}

因此,一个活动可以拥有,但不一定拥有赞助商。我可以创建一个活动,设置赞助商并保存好。

我无法弄清楚如何开展工作

Event event = context.Events.Find(id);
event.Sponsor = null;
context.SaveChanges();

以上内容并未对数据库中的sponsorid列进行更改。

1 个答案:

答案 0 :(得分:0)

尝试将“赞助商”设为虚拟财产。根据您的配置,EF不知道您是否已经加载了Event.Sponsor属性,如果还没有,它也不知道Sponsor = null是一个实际的更改。 EF生成的代理有两种,根据您的POCO,EF没有为您的事件类生成自我跟踪代理(例如,导航属性赞助商不是虚拟的),因此在比较快照时上一个Event实体,其中“Sponsor”未加载和更新的那个,其中“Sponser”设置为null,它假定您没有更改它的值。