身份'component_type_name'的成员在元数据集合中不存在。\ r \ nParameter name:identity

时间:2011-06-04 17:43:02

标签: sql-server entity-framework triggers

在数据库中,我有一个名为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 个答案:

答案 0 :(得分:5)

你不能这样做:

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

它会将COMPONENT_TYPES_IN_SERVICE记录返回给您的应用程序,EF会尝试将返回的值复制到SERVICE,因为它认为您正在传回一些数据库生成的值。

答案 1 :(得分:3)

使用Entity Framework

时,不能有任何select语句返回触发器中的值

答案 2 :(得分:1)

在大多数情况下,这个不熟悉的错误的确切原因是在使用Entity Framework时触发器中存在SELECT语句。删除它们将很有可能修复错误。