私のアプリケーションでは、ユーザーは別のユーザーに注文の承認を委任できます。
私が検証する必要があるのは、循環参照がないため、特定の期間にUser A
委任された場合、その期間内のいつでも委任できない、つまり重複があることです (日付は):User B
User B
User A
dd/mm/yyyy
Delegator Delegated To DateFrom DateTo
User A User B 01/11/2012 08/11/2012
User A User B 16/12/2012 24/12/2012
これは、オーバーラップをチェックする必要があるコードです。
var overlaps = .Session.QueryOver<DelegateOrderApproval>()
.Where(x => x.DateFrom > DateTime.Now && delegateOrderApproval.DelegatedUser.UserId == x.DelegatorUser.UserId)
.And(x => x.DateFrom >= delegateOrderApproval.DateFrom && delegateOrderApproval.DateTo <= x.DateTo
|| (x.DateFrom >= delegateOrderApproval.DateFrom && x.DateTo <= delegateOrderApproval.DateTo)
|| (x.DateFrom <= delegateOrderApproval.DateFrom && x.DateTo >= delegateOrderApproval.DateFrom)
|| (x.DateFrom <= delegateOrderApproval.DateFrom && x.DateTo >= delegateOrderApproval.DateTo))
.List();
次のレコードを追加しようとすると:
Delegator: User B
Delegated To: User A
Date From: 15/11/2012
DateTo: 21/11/2012
その期間User B
の代理人ではないため、競合はないはずですか? User A
12月に記録を更新中です。
日付範囲の重複するコードを検索し、すべてを試しましたが、何も機能していないようです。
何か案は?