如何设置属性,以便在使用SaveChanges时保存多对一关系,并且不会导致:INSERT语句冲突与FOREIGN KEY约束...错误。实体框架/ .Net 4.0:POCO并保存多对一关系
很简单,我有一个广告和一个广告类型,其中有很多广告到一个AdType。广告上有一个物业:
public class Ad
{
public Int32 AdTypeId { get; set; }
public virtual AdType AdType { get; set; }
}
为了涵盖这种关系。
当我这样做:
someAd.AdType = someAdType;
该属性设置就好了,但AdTypeId不是。不用担心,因为我会认为这可以保存。
context.SaveChanges();
问题是在这一点上,试图保存在AdTypeId列中的0值(导致的外键的问题),而不是使用对象分配ADTYPE财产弄清楚它应该插入AdTypeId列。
事情我知道:
- 此时someAdType是 坚持/有一个id。
- AdType属性设置正确。
- AdTypeId为0.
- 数据库中存在外键关系。
- AdTypeId是主键。
- 我已经延期/延迟加载设置为true
我还没有真正试图改变ADTYPE因为它被设置为允许延迟加载。
嘿,我面临同样的问题,并试图用这个选项保存没有成功。据我所知,AcceptAllChangesAfterSave不会尝试检测更改,而只会在保存后调用AcceptChanges(),使实体保持Unchanged状态。如我错了请纠正我。 – 2010-05-24 06:35:45