Код EF 4.1 - сначала добавление триггера в таблицу - PullRequest
17 голосов
/ 06 мая 2011

Каков наилучший способ добавить триггер в таблицу, созданную с помощью подхода «сначала код» с EF 4.1?

Я считаю, что способ состоит в том, чтобы выполнить пользовательский запрос SQL либо в OnModelCreating, либо когда Dbконтекст инициализируется.

Есть идея получше?

Ответы [ 2 ]

19 голосов
/ 06 мая 2011

Использование пользовательского инициализатора, который будет выполнять CREATE TRIGGER Команда SQL - единственная опция, если вы хотите, чтобы EF создал для вас триггер ( код, подобный приведенному здесь ).Также не забудьте включить SET NOCOUNT ON в начале кода триггера.

Но есть более сложная проблема, связанная с логикой триггера.Если вам нужен триггер, который будет изменять данные, передаваемые в базу данных, вы должны понимать, что изменения, сделанные триггером, не будут отражены в вашем текущем контексте.Контекст по-прежнему будет знать только сущность с данными, которые вы передали в базу данных.Обычно это решается установкой свойств, измененных триггером как DatabaseGeneratedOption.Computed для обновления или DatabaseGeneratedOption.Identity для вставки.В таком случае вы не можете изменять свойства в вашем приложении, и они должны быть изменены в базе данных.EF гарантирует, что эти свойства будут выбраны после модификации и переданы объекту.Проблема в том, что это не работает с первым кодом .

1 голос
/ 06 мая 2011

Я не совсем уверен, что вы имеете в виду. Если вам нужен фактический триггер SQL для таблицы, я бы создал триггер, как обычно, в SQL. Если вы имеете в виду, что вы хотите, чтобы какая-то обработка / обновление происходили в вашем коде всякий раз, когда один из ваших наборов сущностей изменяется, тогда я думаю, что вы захотите создать пользовательский метод, который будет вызываться при каждом обновлении этого набора сущностей. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...