私はMVCとc#を使用したEF4.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画像(ブレーキポイントを入れて走ると正しい値が表示されます)