【发布时间】:2016-10-14 19:46:59
【问题描述】:
我的客户端项目中有一个对 DataServiceContext 类的服务引用。
我需要创建一个新实体并将其保存到数据库上下文中。
当我单独保存这个实体时一切顺利,没有任何链接实体。
A a = new A();
context.AddToAs(a);
context.BeginSaveChanges(o=>{
//some after-save code there
}, null);
但是,代码是这样的:
A a = new a(); //parent entity
B b = new b(); //child entity which has corresponding b.A navigation
//property and b.AId field for referencing 'A' entity primary
//key.
a.b = b;
context.AddToAs(a);
context.AddToBs(b);
context.SetLink(b, "A", a);
context.BeginSaveChanges(o=>{
//some after-save code here
}, null);
...因“INSERT 语句与 FOREIGN KEY 约束冲突”错误而失败。
当然,我知道新创建的“A”实体的主键设置为“0”,并且“B”实体中的相应导航属性,如 b.AId 在保存时也等于“0”。这确实会导致问题 - 数据库中已存在主键为“0”的“A”实体。
所以我必须先保存“A”实体,而不分配任何链接的“B”,以便保存“A”实体并接收真实 ID,然后 - 将“B”附加到 A 并再次保存上下文,这样'B' 实体被保存。
我非常确定我在那里做错了什么,任何人都可以就如何使用单个 SaveChanges 完成它提供任何建议吗?
【问题讨论】:
标签: c# .net entity-framework wcf odata