如何设置属性以便在使用SaveChanges时保存多对一关系,并且我没有得到:INSERT语句与FOREIGN KEY约束冲突...错误。
非常简单,我有一个广告和一个广告类型,其中有一个广告到一个广告类型。 Ad上有一个属性:
public class Ad
{
public Int32 AdTypeId { get; set; }
public virtual AdType AdType { get; set; }
}
要涵盖这种关系。
当我这样做时:
someAd.AdType = someAdType;
该属性设置得很好,但AdTypeId不是。不用担心,因为我认为这可以保存。
context.SaveChanges();
此时问题是它试图在AdTypeId列中保存0值(导致外键问题),而不是使用分配了AdType属性的对象来确定它应该插入到AdTypeId列中的内容。
我知道的事情:
我还没有真正尝试更改AdType,因为它设置为允许延迟加载。
答案 0 :(得分:4)
好的看起来好像是因为我使用的是非代理(使那个词起来......呀)“基于快照的更改跟踪”方法,系统并没有真正意识到它已经改变了。
在这个例子中,Customer是纯粹的 POCO类型。与EntityObject或 基于IPOCO的实体,进行更改 到实体不会自动 保持州经理同步,因为 没有自动通知 你的纯POCO实体和 实体框架。因此,在 它认为,询问州经理 客户对象状态是 即使我们有,也不会改变 明确地改变了其中一个 实体上的属性。
因此,为了确保它知道检查是否有更改,我必须使用SaveChanges方法的AcceptAllChangesAfterSave选项。
context.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);
它有效。希望我理解正确......