このストアドプロシージャは、EntityFramework4.1オブジェクトにマップされています。呼び出しは内で行われます
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
これをMSSQLのように実行すると、テーブルの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になることを確認します。
なぜIFELSE計算を行わず、価格を使用しないのか理解できませんでした。
他の誰かが何か奇妙なものを見ていますか?これは、ここ数日気が遠くなるようなものです。助けていただければ幸いです。ありがとう
更新 他の人をよりよくガイドするためにタイトルを更新しました