0

私はMVCとc#を使用したEF4.1コードの最初の開発に取り組んでいます。

これは私の要件です:

  1. 同じデータベース列のモデルクラスの2つのプロパティをマップする方法はありますか?

B'cos私は以下のようなデータ検索の問題を抱えています。

複雑な計算を行うdb列の現在マップされているプロパティ。

そのため、UIからajax呼び出しとして呼び出すと、計算値を0.0として取得し、その計算遅延のb'cosを取得します(デバッグを行ってから速度を落とすと、正しく値が生成されます)。

計算のない別のフィールドを設定すると、正しく表示されます。

上記の問題を克服する方法は?

以下の私のモデルコードの一部。

public class Invoice
    {
        public Invoice() { Id = Guid.NewGuid(); Created = DateTime.Now; }
        public Guid Id { get; set; }

        public decimal LatestTotal { get; set; }

        [NotMapped]
        public decimal Total
        {
            get
            {
                return (LatestTotal = this.CalculateTotal());
            }
        }
 } 

問題のあるプロパティはLatestTotal

アクション方法は以下のようになります

public ActionResult GetServiceAndRetailSalesDetails(Guid invoiceOrSaleId, string providerKey, DateTime checkoutDate, double checkoutTime)
        {
            var items = new List<CheckOutServiceAndRetailItem>();
            TimeSpan timeResult = TimeSpan.FromHours(checkoutTime);
            var checkOut = checkoutDate + timeResult;

             var serviceDetails = Repository.GetAllPayableItems(checkOut, invoiceOrSaleId).ToList();

                foreach (var s in serviceDetails)
                {
                    var item = new CheckOutServiceAndRetailItem
                    {
                        AllocationOrInvoiceOrSaleId = s.Allocation.AllocationId, 
                        Name = s.Allocation.Service.Name,
                        Price = s.LatestTotal,
                        //Price = s.Total,
                        Class = s.Allocation.Service.IsAnExtra ? "RetailOrExtraService" : "",
                    };
                    items.Add(item);
                }
     return Json(items, JsonRequestBehavior.AllowGet);
}

UIからのAjax呼び出しは次のようになります。

$.ajax({
     type: "GET",
     url: "/Portal/GetServiceAndRetailSalesDetails",
     dataType: 'json',
     contentType: "application/json; charset=UTF-8",
     data: { invoiceOrSaleId: invoiceOrSaleId, providerKey: providerKey, checkoutDate: checkoutDate, checkoutTime: checkoutTime },
     success: function (response) {
              make = "<table id='tblPayment'>";
              var totalToBepaid = 0.0;
              toBePaidItems = [];
              $.each(response, function (index, sr) {
              if (unPaid) {
              make += "<tr id=" + sr.AllocationOrInvoiceOrSaleId + " class=" + sr.Class + ">" + "<td style='padding-right:100px'>" + sr.Name + "</td><td class='colTotal' style='padding-right:45px'>" + '$ ' + sr.Price.toFixed(2) + "</td><td></tr>";
               } else {
                   make += "<tr id=" + sr.AllocationOrInvoiceOrSaleId + " class=" + sr.Class + ">" + "<td style='padding-right:100px'>" + sr.Name + "</td><td class='colTotal' style='padding-right:45px'>" + '$ ' + sr.Price.toFixed(2) + "</td></tr>";
                   }
                   totalToBepaid += sr.Price;
               //insert into array
               toBePaidItems.push(sr.AllocationOrInvoiceOrSaleId);
       });
       var lateFee = parseFloat($("#hdnLateFee").val());
       if (lateFee > 0) {
               totalToBepaid += lateFee;
               make += "<tr class='Fees'><td style='padding-right:100px'>Late Pickup Fee</td><td class='colTotal' style='padding-right:45px'>" + '$ ' + lateFee + "</td></tr>";
                 }
              make += "</table>";
              $("#serviceAndRetailDetails").html(make);
         }
         });

以下のUI画像(ブレーキポイントを入れて走ると正しい値が表示されます)

ここに画像の説明を入力してください

4

0 に答える 0