2014-09-30 77 views
0

我有如下表:Breezejs唯一約束與刪除

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」,業務邏輯層將另一行的YESNO字段設置爲Y.

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

在進行實際的數據庫操作,微風首先更新其它行Y,前執行原始刪除。這違反了獨特的約束。有沒有簡單的方法使DELETE首先發生,還是需要特殊的服務器端刪除處理?

回答

0

Breeze不控制在服務器上執行的操作順序。你沒有說你在服務器上使用了什麼技術,但問題標籤告訴我這是EF和SQL Server。在這種情況下,它是在刪除之前進行更新的EF。

我希望有一種方法可以告訴EF該怎麼做。就我所知,這是不可能的。

您可以接管並且不難做到這一點,特別是如果您可以將這一系列操作與他人分開。看看beforeSave ...方法。如果您需要在同一個事務中保存兩部分(可能),請了解如何設置自己的環境事務,以便可以對EF(或數據庫直接)執行兩個調用,一個執行刪除操作,另一個執行刪除操作做更新。