Breezejs带删除的唯一约束

时间:2014-09-30 15:03:04

标签: javascript entity-framework sql-server-2008 breeze

我有下表:

CREATE TABLE Foo AS (
  Id int not null primary key,
  YesNo char(1) not null default('N')
)

具有以下约束 - “只有一行可能具有值'Y'”

CREATE UNIQUE NONCLUSTERED INDEX [IX_YesNo] ON [dbo].[Foo]
(
    [YesNo] ASC
)
WHERE ([YesNo]=('Y'))

应用程序代码(Breeze JS)强制一行始终为“Y”。因此,如果使用YesNo ='Y'删除行,BLL会将另一个Row的YesNo字段设置为Y.

origEntity.entityAspect.setDeleted();
otherEntity.YesNo('Y');

执行实际的数据库操作时,在执行删除原始操作之前,Breeze首先将另一行更新为Y.这违反了唯一约束。是否有一种简单的方法可以使DELETE首先发生,还是需要特殊的服务器端删除处理?

1 个答案:

答案 0 :(得分:0)

Breeze无法控制在服务器上执行的操作顺序。您没有说出您在服务器上使用的技术,但问题标签告诉我它是EF和SQL Server。在这种情况下,EF是在删除之前进行更新。

我希望有办法告诉EF该怎么做。据我所知,这是不可能的。

您可以接管并且这样做并不困难,尤其是如果您可以将这一系列操作与其他操作隔离开来。看一下beforeSave ...方法。如果您需要同一事务中的两个部分保存(可能),请学习如何设置自己的环境事务,以便可以对EF(或直接数据库)进行两次调用,一次执行删除,另一次执行删除操作。做更新。