Член с идентификатором 'component_type_name' не существует в коллекции метаданных. \ R \ nИмя параметра: идентификатор - PullRequest
3 голосов
/ 04 июня 2011

В базе данных у меня есть таблица под названием SERVICE. Для этой таблицы у меня есть триггеры после INSER / UPDATE / DELETE. Когда я пытаюсь вставить запись в базу данных с помощью EF, я получаю сообщение об ошибке «Элемент с идентификатором« component_type_name »не существует в коллекции метаданных. \ R \ nParameter name: identity» . Столбец 'component_type_name' не существует в таблице SERVICE, но в таблице COMPONENT_TYPES_IN_SERVICE. Это триггер вставки для таблицы SERVICE. Когда я удаляю триггер из таблицы, у меня не возникает проблем со вставкой.

CREATE TRIGGER [dbo].[UpdateComponentTypesInServiceOnInsert]
   ON [dbo].[SERVICE] 
   AFTER INSERT
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

DECLARE @componentID int;
SET @componentID = 0;

DECLARE @ComponentTypeID int;
SET @ComponentTypeID = 0;

DECLARE @ComponentTypeName nvarchar(255);
SET @ComponentTypeName = null;

SELECT @componentID = component_id from inserted;

SELECT @ComponentTypeID = c.component_type_id, @ComponentTypeName = ct.description from COMPONENTS c
inner join dbo.COMPONENT_TYPES ct on c.component_type_id = ct.id
WHERE c.id = @componentID; 

Select * from COMPONENT_TYPES_IN_SERVICE cts
where cts.id = @ComponentTypeID;

IF (@@ROWCOUNT > 0)
    BEGIN
        UPDATE COMPONENT_TYPES_IN_SERVICE
        SET number_of_components = number_of_components + 1
        WHERE id = @ComponentTypeID;
    END
ELSE
    BEGIN
        INSERT INTO COMPONENT_TYPES_IN_SERVICE(id, component_type_name, number_of_components)
        VALUES (@ComponentTypeID, @ComponentTypeName, 1); 
    END
END

Кто-нибудь знает какое-нибудь решение ???

Ответы [ 3 ]

5 голосов
/ 04 июня 2011

Вы не можете сделать это:

Select * from COMPONENT_TYPES_IN_SERVICE cts
where cts.id = @ComponentTypeID;

Возвращает COMPONENT_TYPES_IN_SERVICE запись обратно в ваше приложение, и EF пытается скопировать возвращенные значения в SERVICE, поскольку считает, что вы возвращаете некоторые сгенерированные базой данных значения.

3 голосов
/ 01 сентября 2013

У вас не может быть оператора select, который возвращает значения в вашем триггере при использовании Entity Framework

1 голос
/ 15 октября 2014

Точной причиной этой незнакомой ошибки в большинстве случаев является наличие операторов SELECT в триггерах при использовании Entity Framework. Удаление их исправило бы ошибку с высокой вероятностью.

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