Будет ли Entity Framework и SQL Server блокировать объект / запись при удалении - PullRequest
0 голосов
/ 15 марта 2012

Я удаляю некоторые объекты и строки с помощью двух методов в моем веб-приложении MVC asp.net: первый подход включает удаление объекта Entity Framework, например:

public void DeleteMyObject(MyObject a)
{
    entities1.MyObject.Remove(a);
}

, тогда как второй подход вызываетхранимая процедура из моего метода репозитория для удаления строки базы данных, такой как:

public void Deleteuserclass(string a, int u)
{
     entities1.deleteuserclass(a, u); 
}

, которая вызывает следующую хранимую процедуру:

ALTER PROCEDURE dbo.deleteuserclass
    @userid nvarchar(50),
    @classid int
AS
Begin
    Delete from Users_Classes where UserID = @userid  AND ClassID = @classid

    if @@rowcount = 0     
        Raiserror('No record deleted',1,16) 
END

с использованием любого из двух вышеуказанных подходов;могу ли я быть уверен, что если два запроса на удаление для удаления одного и того же объекта поступят на сервер одновременно, то только один запрос удалит запись из базы данных, а другой запрос получит исключение (я имею в виду Entity Framework илибаза данных SQL Server блокирует строку во время ее удаления?)?

BR

1 Ответ

1 голос
/ 15 марта 2012

Один или другой будут выполняться первыми.

Если ваша хранимая процедура выполняется второй, вы получите исключение из-за оператора if в хранимой процедуре.

Если команда EFво время выполнения возникнет исключение OptimisticConcurrencyException, см .: EF-эквивалент для строк, затронутых SqlCommand.ExecuteNonQuery

...