2011-06-04 40 views
3

在數據庫中,我有一個名爲SERVICE的表。對於這個表,我在INSER/UPDATE/DELETE之後有觸發器。當我嘗試使用EF向數據庫中插入記錄時,出現錯誤「元數據集合中不存在標識爲'component_type_name'的成員。\ r \ n參數名稱:標識」。 「component_type_name」列在SERVICE表中不存在,但在表COMPONENT_TYPES_IN_SERVICE中。 這是表SERVICE的插入觸發器。當我從表格中刪除扳機時,我沒有任何插入問題。元數據集合中不存在標識爲'component_type_name'的成員。 r n參數名稱:標識

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 

有沒有人知道任何解決方案???

回答

5

你不能做到這一點:

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

它返回COMPONENT_TYPES_IN_SERVICE回錄到你的應用程序和EF嘗試,因爲它認爲你是傳回一些數據庫生成的值來複制返回值到SERVICE

3

你不能在你的觸發器使用實體框架

1

在大多數時候這個陌生的錯誤的確切原因,當是在觸發器SELECT語句的存在,而使用實體框架返回值的任何選擇語句。刪除它們將很有可能修復錯誤。

相關問題