Ben yan etkiler ve aşağıdaki desen potansiyel sorunlar ilgileniyorum: Tek prosedür ile kullanıldığında ses benim anlayış bu desen kadarıylaTL CATCH ROLLBACK kalıbı içeren iç içe geçmiş prosedürler?
CREATE PROCEDURE [Name]
AS
BEGIN
BEGIN TRANSACTION
BEGIN TRY
[...Perform work, call nested procedures...]
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]
END CATCH
END
edilir - tüm prosedür olacak ya tam onun hatasız ifadeler veya tüm eylemleri geri yükler ve hatayı rapor eder.
Ancak, bir saklı yordam, işin bir alt birimi yapmak için saklı yordam çağrısı yaptığında (daha küçük yordamın bazen kendi kendine çağrıldığı anlaşılırken), geri almalarla ilgili bir sorun görüyorum - bilgi iletisi (Seviye 16) The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
belirtilerek yayınlanmıştır. Alt-yordamdaki geri dönüş, yalnızca alt işlemde başlatılan işlemden ziyade, en dıştaki işlemi geri aldığından kaynaklanmaktadır.
Herhangi bir hata meydana geldiğinde (ve SQL hatası olarak müşteriye rapor edilirken hata oluştuğunda) tüm şeyin geri alınmasını ve iptal edilmesini istiyorum, sadece dış katmanlardan gelen tüm yan etkilerden emin değilim. daha önce geri alınmış bir işlemi geri almak için Her bir TL CATCH katmanında bir geri dönüş yapmadan önce @@TRANCOUNT
'un bir kontrolü olabilir mi? can, bir saklı yordam, "MySubProcedure", MyStoredProcedure hata yükseltir içine denilen durumunda
try
{
var context = new MyDataContext();
using (var transaction = new TransactionScope())
{
// Some Linq stuff
context.SubmitChanges();
context.MyStoredProcedure();
transactionComplete();
}
}
catch
{
// An error occured!
}
:
Son olarak, bu kendi işlem katmanına sahiptir istemci ucu (Linq2SQL) vardır Daha önce MyStoredProcedure'da yapılan her şeyin geri alınacağından, SubmitChanges tarafından yapılan tüm Linq işlemlerinin geri alınacağından ve son olarak hatanın kaydedileceğinden emin olabilirim. Veya tüm işlemin atomik olduğundan emin olmak için desenimde değiştirmek zorundayım, ancak yine de çocuk parçalarının tek tek kullanılmasına izin veriliyor (yani alt prosedürler hala aynı atom korumasına sahip olmalıdır)
Alt yordamınız, dış işleminizden (örn. Işlem) bir şeye güveniyorsa, bana öyle olmamalı ki, çok fazla eşleşme var gibi görünüyor. Düzenleme: Sorunu yanlış okudum galiba –