Здравствуйте, peer, Вы писали:
P>Есть таблица в базе.
P>В нее вставляются некоторые данные внешним приложением или процедурой.
P>Задача: Нужно некоторые данные не вставлять.
Возможно EF ожидает результат вставки через @@rowcount или scope_identity(), а в итоге получает 0. В любом случае нужно быть осведомленным на все 100% в том, что происходит дальше после вставки в эту таблицу. Даже если предположить, что удалось вставить данные и EF нормально отработал эту ситуацию, дальнейшая логика приложения может быть построена таким образом, что полученный идентификатор (запись) после вставки используется в других таблицах как FK.
Если рассмотреть идеальный случай, т.е. таблица не имеет связей с другими таблицами и логика приложения заключается лишь в том, что данные вставляются только в нее одну, то можно рассмотреть вариант с AFTER триггером на вставку через удаление. Вариант конечно сомнительный, т.к. для того чтобы проигнорировать вставку, нужно сначала вставить, а потом удалить, но если очень нужно...
| Скрипт для MS SQL |
| CREATE TABLE dbo.T1
(
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Value1] [varchar](50) NULL
)
GO
CREATE TRIGGER [dbo].[trg_T1_I]
ON [dbo].[T1]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
delete t1
from inserted i
join dbo.T1 t1 on i.Id = t1.Id
where t1.Value1 like 'A%'
END
GO
insert into dbo.T1(Value1)
select 'A' union all select 'FG'
select SCOPE_IDENTITY(), @@ROWCOUNT
|
| |
Другой вариант — вставлять все подряд, а потом ненужные данные удалять по расписанию, но здесь многое зависит от вашего бизнес-процесса, насколько это критично.