【问题标题】:The member with identity 'component_type_name' does not exist in the metadata collection.\r\nParameter name: identity元数据集合中不存在身份为“component_type_name”的成员。\r\n参数名称: 身份
【发布时间】:2011-06-04 17:43:02
【问题描述】:

在数据库中,我有一个名为 SERVICE 的表。对于这个表,我在 INSER/UPDATE/DELETE 之后有触发器。当我尝试使用 EF 将记录插入数据库时​​,我收到错误 “元数据集合中不存在身份为 'component_type_name' 的成员。\r\n参数名称:身份”。 SERVICE 表中不存在“component_type_name”列,但在 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

有人知道解决办法吗???

【问题讨论】:

    标签: sql-server entity-framework triggers


    【解决方案1】:

    你不能这样做:

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

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

    【讨论】:

      【解决方案2】:

      使用实体框架时,您的触发器中不能有任何返回值的选择语句

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2016-09-25
          • 2012-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-14
          • 2023-03-28
          • 2011-07-06
          • 1970-01-01
          相关资源
          最近更新 更多