2011-07-21 9 views
1

SaveChanges()が完了した後にAFTER INSERTトリガを起動できません。 ExecuteStoreCommand()でのT-SQLの使用は役に立ちません。すべてのトリガーはサーバー上で起動されますが、Entity Frameworkでは起動されません。エンティティフレームワークのトリガは起動しません。

私は何をやっている: を私は親テーブルに新しい行を作成します。

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です。

My DBスキーマは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で初心者です)。とにかく、EFなしで公式のFirebird .NETプロバイダを使用して私の問題を克服しようとしましたが、気をつけるトリガーはまだ機能しません。おそらく私が答えを見つけられない場合、私は前のINSERTにトリガ後に移動するか、自分のフィールドを手動で更新します。 –