2011-07-21 66 views
1

在完成SaveChanges()後無法獲取AFTER INSERT觸發器。使用帶有ExecuteStoreCommand()的T-SQL並沒有幫助。所有觸發器都在服務器上觸發,但不是來自實體框架。實體框架觸發器不會觸發

我在做什麼: 我創建父表中的新行:

ORDERS order = new ORDERS 
{ 
    GUID = Guid.NewGuid().ToString(), 
    ORDERDATE = DateTime.Now, 
}; 
DB.AddToORDERS(order); 
DB.SaveChanges(); 

最後我把一些數據到子表,其中觸發器必須插入之後被解僱:

foreach (SPAREPART item in SOMECOLLECTION) 
{ 
    ORDERITEMS orderitem = new ORDERITEMS 
    { 
     ORDER_ID = order.ORDER_ID, //here order.ORDER_ID is 0, but why? 
     PRICE = item.INCOME_PRICE 
    }; 

    DB.ORDERITEMS.AddObject(orderitem); 
    DB.SaveChanges(); 
} 

觸發只需更新父表:

AS 
begin 
    UPDATE ORDERS o SET o.sum = o.sum + NEW.price WHERE o.order_id = NEW.order_id; 
end 

而且我不能讓ŧ他增加了firebird generator生成的order.ORDER_ID,在SaveChanges()完成後它總是0。

我的數據庫模式是由FireBird數據庫生成的。

回答

0

如果您的ORDER_ID爲0,則意味着它未被配置爲在插入後從數據庫返回。檢查你的ORDER_ID屬性是否配置爲StoreGeneratedPattern.Identity

這也是你的觸發器無法工作的原因。它被解僱但是不存在ORDER_ID(0)。

+0

應用了StoreGeneratedPattern.Identity,現在order_id正在自行更新。不幸的是觸發器仍然不起作用。 –

+0

你可以捕獲由EF執行的SQL嗎?它與執行觸發器的手動SQL有什麼不同? –

+0

不能有權限查看DB服務器分析器,並且IntelliTrace未向我顯示任何ADO.NET調試跟蹤(我是EF中的新手)。無論如何,只是試圖通過使用官方的Firebird .NET提供商沒有EF來解決我的問題,該死的觸發器仍然無法正常工作。也許如果我找不到答案,我會將AFTER INSERT觸發器移動到BEFORE INSERT之前或手動更新我的字段。 –