Триггеры SQL Server не работают с Linq to SQL в ASP.NET

Мой коллега по работе делает ASP.NET Web Forms приложение для сбора данных. Я управляю SQL Server База данных этого. На основе базы данных он создает объекты для веб-форм, используя Linq to SQL, Он хотел, чтобы я сделал recodrds в Osoby, чтобы изменить dataDodania с датой генерации объекта и dataModyfikacji с датой последнего обновления. Имея опыт работы с PL/SQL, я сделал для этого простые триггеры. Проблема в том, что триггеры работают, когда я запускаю операторы SQL в SQL Server Management Studio 2008 приятно, но при использовании в приложении - они опускаются, вносить изменения не нужно. Вот триггеры кода SQL:

CREATE TRIGGER [dbo].[DodanieOsoby]
   ON  [dbo].[Osoby]
   INSTEAD OF INSERT
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
        INSERT INTO Osoby(dataDodania, dataModyfikacji, loginId, rola, imie, imieDrugie, nazwisko, plec, wiek,pESEL,wyksztalcenie,opieka,ulica, nrDom, nrLokal, miejscowosc, obszar, kodPoczty, telefonKontakt, telefonStacjo, email, zatrudnienie, stanowisko, przedsiebiorstwo)
        SELECT GETDATE(), GETDATE(), loginId, rola, imie, imieDrugie, nazwisko, plec, wiek, pESEL, wyksztalcenie,opieka,ulica, nrDom, nrLokal, miejscowosc, obszar, kodPoczty, telefonKontakt, telefonStacjo, email, zatrudnienie, stanowisko, przedsiebiorstwo
        FROM inserted 
END

И для ОБНОВЛЕНИЯ Osoby...

CREATE TRIGGER [dbo].[AktualizacjaOsoby]
   ON  [dbo].[Osoby]
   AFTER UPDATE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
        UPDATE Osoby
        SET dataModyfikacji = GETDATE()
        WHERE id in 
        (SELECT DISTINCT id from Inserted)
END

1 ответ

Возможно, это будет полезно для вас (если dbo.Osoby is view) -

ALTER TRIGGER dbo.trg_IOIU_vw_WorkOut

   ON dbo.vw_WorkOut
   INSTEAD OF INSERT, UPDATE

AS BEGIN

    SET NOCOUNT ON
    SET XACT_ABORT ON

    DECLARE
          @WorkOutID BIGINT
        , @DateOut DATETIME
        , @EmployeeID INT

    DECLARE workout CURSOR LOCAL READ_ONLY FAST_FORWARD FOR
        SELECT
              WorkOutID
            , DateOut
            , EmployeeID
        FROM INSERTED

    OPEN workout

    FETCH NEXT FROM workout INTO
          @WorkOutID
        , @DateOut
        , @EmployeeID

    WHILE @@FETCH_STATUS = 0 BEGIN

        IF NOT EXISTS(
            SELECT 1 
            FROM dbo.WorkOut 
            WHERE WorkOutID = @WorkOutID
        )
        BEGIN

            INSERT INTO dbo.WorkOut
            (
                  EmployeeID
                , DateOut
            )
            SELECT
                  @EmployeeID
                , @DateOut

            SELECT SCOPE_IDENTITY() -- if you use LINQ need return new ID to client

        END
        ELSE BEGIN

            UPDATE dbo.WorkOut
            SET 
                  EmployeeID = @EmployeeID
                , DateOut = @DateOut
            WHERE WorkOutID = @WorkOutID

        END

        FETCH NEXT FROM workout INTO
              @WorkOutID
            , @DateOut
            , @EmployeeID

    END

    CLOSE workout
    DEALLOCATE workout

END
Другие вопросы по тегам