Frameworks Breeze.js/EF-在同一SaveChanges批处理中更新时需要插入记录的ID

Frameworks Breeze.js/EF-在同一SaveChanges批处理中更新时需要插入记录的ID,frameworks,entity,breeze,identity,Frameworks,Entity,Breeze,Identity,场景:用户添加一个新的“联系人”记录(姓名、电话、电子邮件),没有什么特别的。同时,他指出此联系人是默认联系人,这是customer表中的FK列。保存更改时,我需要插入新联系人,然后使用插入中的新联系人ID更新客户记录。我使用EF,表对所有键列使用标识 第一个问题,这能做到吗? 第二,如果是,如何进行 谢谢,您可以修改SaveOptions并在其中设置一个标记,然后在服务器上读取,具体取决于您是否设置为默认值 另一个选项是在保存之前设置一个if语句,调用save,然后承诺再次调用服务器以将新实例

场景:用户添加一个新的“联系人”记录(姓名、电话、电子邮件),没有什么特别的。同时,他指出此联系人是默认联系人,这是customer表中的FK列。保存更改时,我需要插入新联系人,然后使用插入中的新联系人ID更新客户记录。我使用EF,表对所有键列使用标识

第一个问题,这能做到吗? 第二,如果是,如何进行


谢谢,您可以修改SaveOptions并在其中设置一个标记,然后在服务器上读取,具体取决于您是否设置为默认值

另一个选项是在保存之前设置一个
if
语句,调用save,然后承诺再次调用服务器以将新实例设置为默认实例

或者您可以加载客户帐户(可能未加载,但我认为应该加载),并将默认ID设置为新创建的客户的ID,然后只调用SaveChanges,它将同时向服务器发送客户帐户和新创建的联系人


这是三种解决办法。第一个似乎有点过火,第二个还行,但我不会用它,以防promise没有回来或什么的。如果您已经加载了客户帐户,则第三种解决方案是完美的。

您在哪里设置标志?您是将该标志发送到服务器,还是应该将逻辑完全发送到客户端?该标志在客户端的用户界面中设置。用户将添加联系人信息(姓名、电子邮件等),屏幕上将显示一个复选框,以便用户可以指示此新联系人将是客户帐户的默认联系人。我可以做接触插入没有问题。但是我需要更新客户帐户记录,我需要刚刚插入的联系人的ID。此联系人ID将出现在客户记录的“DefaultContactID”列中。我将加载客户帐户。您的第二个建议是我将要做的,但我正在寻找一种在服务器上处理此问题的方法。我无法同时将它们发送到服务器(选项3)。联系人的密钥是一个标识字段,将由db创建。我必须等待插入完成,然后获取ID,然后才能在客户记录上发布更新。您在这个场景中使用承诺的想法是有道理的,但现在我有两个单独的事务。这只是可能发生这种情况的多个场景的一个示例。@M您可以设置ID。如果ID是由数据库自动设置的,breeze会将默认ID设置为-1或类似的内容。服务器上的Breeze将识别并将所有设置为-1的键和外键替换为数据库新分配的值。