powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
14 сообщений из 14, страница 1 из 1
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36907295
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица, на ней есть вьюха, чтобы можно было работать с вьюхой как с таблицей написан триггер на INSERT.
Проблема в том, что когда в с помощью Linq добавляется таблица во вьюху, то в объекте не появляется его Id а при вставке в таблицу появляется.
Вопрос: Как красиво получить Id новой записи из вьюхи

Если нужно, вот код триггера:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
CREATE TRIGGER [dbo].[trgrInsertToFullEoI] ON [dbo].[FullEoI]
WITH EXECUTE AS CALLER
INSTEAD OF INSERT
AS
    DECLARE @pPublicObjectID    int                ,
            @pLogName    nvarchar( 1024 )           ,
            @pServiceID    int                       ,
            @pClass    nvarchar( 255 )               ,
            @pOrganizationID    int               ,
            @pCreateDate    datetime           ,
            @pPublic    bit                       ,
            @pPublicDate    datetime           ,
            @pDeadLine    datetime               ,
            @pAuthorID    int                       ,
            @pTag    nvarchar( 255 )               ,
            @pProfileID int                     ,
            @pMessage nvarchar( 1024 )         ,
            @pCompany    nvarchar( 500 )         ,
            @pContact    nvarchar( 500 )         ,
            @pCountryID    int                     ,
            @pIndex    nvarchar( 18 )             ,
            @pCity    nvarchar( 100 )             ,
            @pAddress    nvarchar( 500 )         ,
            @pTelephone    nvarchar( 100 )         ,
            @pFax    nvarchar( 100 )             ,
            @pEmail    nvarchar( 100 )             ,
            @pContactMethod    int    

    DECLARE CursorOfInserted CURSOR FOR
        SELECT    LogName,
                OrganizationID,
                CreateDate,
                [Public],                
                AuthorID,
                ProfileID, 
                [Message],
                Company,
                Contact,
                CountryID ,
                [Index],
                City,
                Address,
                Telephone,
                Fax,
                Email,
                ContactMethod
        FROM inserted
    IF (@pServiceID IS NULL)
        SET @pServiceID =  6 
    OPEN CursorOfInserted
    FETCH NEXT FROM CursorOfInserted 
    INTO        @pLogName,
                @pOrganizationID,
                @pCreateDate,
                @pPublic,
                @pAuthorID,
                @pProfileID, 
                @pMessage,
                @pCompany,
                @pContact,
                @pCountryID,
                @pIndex,
                @pCity,
                @pAddress,
                @pTelephone,
                @pFax,
                @pEmail,
                @pContactMethod
    SET @pClass = 'Expression of Interest'
    SET @pServiceID =  6 
    SET @pPublicDate = GETDATE()
    WHILE @@FETCH_STATUS =  0  
    BEGIN        
        EXECUTE dbo.InsertToPublicObject @pLogName, @pServiceID, @pClass, @pOrganizationID, @pCreateDate, @pPublic, @pPublicDate, @pDeadLine, @pAuthorID, @pTag
     
        SELECT @@IDENTITY AS PublicObjectID
        FROM dbo.PublicObject

        SET @pPublicObjectID = @@IDENTITY
        
        INSERT 
        INTO dbo.EoI (    PublicObjectID, 
                        ProfileID, 
                        Message,
                        Company,
                        Contact,
                        CountryID,
                        [Index],
                        City,
                        Address,
                        Telephone,
                        Fax,
                        Email,
                        ContactMethod) 
        VALUES (@pPublicObjectID,
                @pProfileID, 
                @pMessage,
                @pCompany,
                @pContact,
                @pCountryID,
                @pIndex,
                @pCity,
                @pAddress,
                @pTelephone,
                @pFax,
                @pEmail,
                @pContactMethod)
        FETCH NEXT FROM CursorOfInserted 
        INTO    @pLogName,
                @pOrganizationID,
                @pCreateDate,
                @pPublic,
                @pAuthorID,
                @pProfileID, 
                @pMessage,
                @pCompany,
                @pContact,
                @pCountryID,
                @pIndex,
                @pCity,
                @pAddress,
                @pTelephone,
                @pFax,
                @pEmail,
                @pContactMethod
    END
    CLOSE CursorOfInserted
    DEALLOCATE CursorOfInserted
GO
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36907493
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заложите логику триггера в метод с контекстом. Триггер - убрать.
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36907553
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЗаложите логику триггера в метод с контекстом. Триггер - убрать.
Что значит в метод? Если Вы имели ввиду хранимую процедуру, то да это выход, но хотелось бы более красиво сделать. Если вы имели ввиду метод в коде проги, то этого сделать нельзя, доступна только вьюха. Собственно инсерт можно SQL'ем сделать, но хочется раз уж пишешь на Linq, то всё на Linq делать.
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36907569
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12Что значит в метод?
То и значит в метод. Что тут не ясного-то?

palich12Если Вы имели ввиду хранимую процедуру, то да это выход
Я имел ввиду, отдельный C# код. Хранимая процедура тоже подойдёт.

palich12но хотелось бы более красиво сделать.
Красиво - это без триггера.

palich12Если вы имели ввиду метод в коде проги, то этого сделать нельзя, доступна только вьюха.
Тогда Ваша задача не решается. Вы идёте в обход ORM.

palich12Собственно инсерт можно SQL'ем сделать, но хочется раз уж пишешь на Linq, то всё на Linq делать.
О том и речь. Если юзаете ORM - значит делайте все телодвижения в ней. Триггер - в топку.
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36907612
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

Хорошо, то есть Вы хотите сказать, что Linq to SQL не умеет использовать SCOPE_IDENTIFITY ??
или во всяком случае не применяет их для вьюх.

З.Ы.
Причем здесь ORM, есть источник данных, вьюха, есть объект который с ней работает. Причем здесь триггер, его вобще не видно на уровне кода и соответсвенно ORM, он работает только на уровне СУБД и виден только её админу.

И.М.Х.О.
Если эта проблема не имеет решения без метода или процедуры, то это косяк Linq to SQL, но скорее всего это сделать можно.
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36907619
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12Хорошо, то есть Вы хотите сказать, что Linq to SQL не умеет использовать SCOPE_IDENTIFITY ??
Я хочу сказать, что Ваша задача с триггером + Linq To SQL не решается. Не более того.

Во всём остальном Вам поможет профайлер.
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36907644
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Параллельное обсуждение идет на
http://social.msdn.microsoft.com/Forums/ru-RU/fordataru/thread/9f938e95-eb89-4176-a085-37cac6793cbe
из него видно что в целом Linq использует SCOPE_IDENTITY(), но не хочет его использовать в этом конкретном случае, видимо косяк, как там предполагают, в модели БД построенной в Linq. Так что возможно решение есть.
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36907666
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно смотреть не обсуждения, а в профайлер.
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36922294
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНужно смотреть не обсуждения, а в профайлер.
Profiler посмотрел, запрос в нем выглядит достаточно просто:
Код: plaintext
1.
INSERT INTO [dbo].[FullEoI]([PublicObjectID], [LogName], [OrganizationID], [CreateDate], [Public], [AuthorID], [ProfileID], [Message], [Address], [City], [Company], [Contact], [ContactMethod], [CountryID], [Email], [Fax], [Index], [Telephone])
VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12, @p13, @p14, @p15, @p16, @p17)
Собственно [PublicObjectID] это идентификатор, который вставляться не должен, но есть т. к. в схеме БД не стоит Auto Generated Value, а если его поставить то VS падает с ошибкой base {System.SystemException} = {"Заданное приведение является недопустимым."}, но запрос проходит и в нем нет [PublicObjectID] но SCOPE по прежнему не появляется.
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36924924
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где же ты, МСУ !?
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36924950
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стал реже бывать - бросил курить. Ем никоретто, помогает. Моск должен отдохнуть от умных вопросов. Поэтому пока ударился в питьё кефира по утрам и в холивар на других форумах :)
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36969155
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И так результатом обсуждения в этой теме
http://social.msdn.microsoft.com/Forums/ru-RU/fordataru/thread/9f938e95-eb89-4176-a085-37cac6793cbe
Стало то, что требуемого результата можно добиться только при помощи хранимых процедур, так что если кто-то столкнулся, то готовьтесь писать хранимки
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36969460
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12 Стало то, что требуемого результата можно добиться только при помощи хранимых процедур, так что если кто-то столкнулся, то готовьтесь писать хранимки

И правильно. Ибо триггеры - зло. А при правильном подходе к постановке задачи - и реляционная база тоже зло. Вместе с ORM.
...
Рейтинг: 0 / 0
Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
    #36969734
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд,

Бугагашечка.

кто ж тебе мешает, храни данные тогда в текстовый файлах, желаю удачи.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как узнать присвоенный Id только что вставленной записи через тригер спомощью Linq
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]