2012-06-29 80 views
1

我有這個存儲過程,它映射到實體框架4.1對象中。撥打電話實體框架在執行INSERT和UPDATE存儲過程時執行INSERT

using (TransactionScope transaction = new TransactionScope()) 
{ 
      try 
      { 
       DbEntity.Car.AddObject(CarInfo); 
       DbEntity.SaveChanges(); 

/* Other object savings */ 

       transaction.Complete(); 

       DbEntity.AcceptAllChanges(); 
      } 
      catch (Exception exp) 
      { 
       throw exp; 
      } 
      finally 
      { 
       DbEntity.Dispose(); 
      } 
} 

我看到當前完成的存儲過程映射。如果我在MS SQL服務器上單獨執行存儲過程,它會正確執行。

這裏是存儲過程

ALTER PROCEDURE [dbo].[Carinsert] @Qty    INT 
           ,@StyleID   INT 
           ,@TFee    MONEY 
           ,@HWayTax   MONEY 
           ,@OFees   MONEY 
           ,@OFeesDescription NTEXT 
           ,@MUp    DECIMAL(18, 4) 
           ,@BAss    MONEY 
           ,@PriceMSRP  MONEY 
           ,@PriceSpecial  MONEY 
AS 
BEGIN 
    SET nocount ON 

    DECLARE @PTotal MONEY 
    DECLARE @TaxFeesNet MONEY 
    DECLARE @CarID INT 

    SET @TaxFeesNet = Isnull(@TFee, 0) + Isnull(@HWayTax, 0) 
        + Isnull(@OFees, 0) 

    IF(@PriceSpecial IS NULL) 
    BEGIN 
     SET @PTotal = @PriceMSRP + @TaxFeesNet 
    END 
    ELSE 
    BEGIN 
     SET @PTotal = @PriceSpecial + @TaxFeesNet 
    END 

    INSERT INTO Car 
       (Qty 
       ,StyleID 
       ,MUp 
       ,BAss 
       ,PriceMSRP 
       ,PriceSpecial 
       ,TFee 
       ,HWayTax 
       ,OFees 
       ,OFeesDescription 
       ,PriceTotal) 
    VALUES  (@Qty 
       ,@StyleID 
       ,@MUp 
       ,@BAss 
       ,@PriceMSRP 
       ,@PriceSpecial 
       ,@TFee 
       ,@HWayTax 
       ,@OFees 
       ,@OFeesDescription 
       ,@PTotal) 

    SELECT Scope_identity() AS CarID 
END 

如果我執行該像MS SQL它計算在表中的PriceTotal列作爲3444.00,這是正確的。

@Qty= 5, 
    @StyleID = 331410, 
    @TFee = NULL, 
    @HWayTax = NULL, 
    @OFees = NULL, 
    @OFeesDescription = NULL, 
    @MUp = 4, 
    @BAss = 10000, 
    @PriceMSRP = 20120, 
    @PriceSpecial = 3444 

當我運行了MVC的Web應用程序,我調試&看到這些傳遞的值和PriceTotal來20120.00

我無法弄清楚,爲什麼它不會做的IF ELSE計算&使用價格。

其他人看到奇怪的東西嗎?這幾天來一直令人望而生畏。任何幫助讚賞。由於

更新 我的標題更新,以更好地指導別人

回答

0

張貼問題的幾分鐘之後,我想通了這一切。

實際上有2個錯誤。

  1. 即使我嘗試插入新記錄,實體框架也使用UPDATE存儲過程。只是爲了記錄,UPDATE存儲過程需要CarID [主鍵]。可能是EF首先執行INSERT,然後立即執行UPDATE,即使是創建新記錄?

  2. UPDATE sproc有一個使用<>檢查NULL的錯誤。它應該是非空的

在任何情況下,現在這是一個更大的問題。如何強制EF使用INSERT sproc而不是UPDATE當我只想要創建新記錄時?

我試過 DbEntityContext.ObjectStateManager.ChangeObjectState(carInfo,EntityState.Added); 仍然保持EF調用UPDATE sproc。

相關問題