在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数据库生成的。
答案 0 :(得分:0)
如果ORDER_ID
为0,则意味着它未配置为在插入后从数据库返回。检查您的ORDER_ID
媒体资源是否配置了StoreGeneratedPattern.Identity
。
这也是您的触发器不起作用的原因。它被解雇但是不存在ORDER_ID
(0)。