实体框架触发器不会触发

时间:2011-07-21 12:49:38

标签: entity-framework firebird

在SaveChanges()完成后无法触发AFTER INSERT触发器。使用T-SQL和ExecuteStoreCommand()没有帮助。所有触发器都在服务器上触发,但不是从实体框架触发。

我在做什么: 我在父表中创建了一个新行:

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生成器生成的增加的order.ORDER_ID,在SaveChanges()完成后它始终为0。

我的数据库架构是从FireBird数据库生成的。

1 个答案:

答案 0 :(得分:0)

如果ORDER_ID为0,则意味着它未配置为在插入后从数据库返回。检查您的ORDER_ID媒体资源是否配置了StoreGeneratedPattern.Identity

这也是您的触发器不起作用的原因。它被解雇但是不存在ORDER_ID(0)。