亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從存儲過程結果實體框架創建列表

如何從存儲過程結果實體框架創建列表

C#
慕桂英3389331 2022-06-19 09:50:52
我正在使用 ASP.NET MVC 和 EF 創建一個車輛預訂應用程序,如果需要,用戶可以在一個日期時間預訂多輛車輛。我創建了一個存儲過程來防止重復預訂車輛,但是在弄清楚如何將結果添加到列表中時遇到了麻煩。示例:我想為 2018 年 12 月 18 日的 12:00 到 13:00 保留 Vehicle#1 和 Vehicle#2....存儲過程轉到 db 以發現 Vehicle#1 已經從 12:00 保留至 13:00,但未預留車輛#2。由于foreachthat 運行,alreadyReservedVehicle返回結果,.Count() = 0因為它看到最后一個結果,即 Vehicle#2 未被保留。它應該顯示一條錯誤消息,說不允許重復預訂,因為車輛#1 已經預訂,但它不計算該預訂。有沒有辦法收集這兩個結果并告訴應用程序因為這 2 輛車中的一輛被預訂,所以這兩輛車都不能被預訂?public ActionResult Create([Bind(Include = "ID,StartDate,EndDate,RequestorID,Destination,PurposeOfTrip,TransportStudentsFG,LastChangedBy,LastChangedDate,VehicleList,ThemeColor")] Reservations reservation){    if (ModelState.IsValid)    {        var selectedVehicles = reservation.VehicleList.Where(x => x.IsChecked == true).ToList();        List<usp_PreventDoubleBooking_Result> alreadyReservedVehicle = null;        // get each vehicle that was selected to be reserved then check db to make sure it is available        foreach (var selectedVehicle in selectedVehicles)         {                         using (VehicleReservationEntities db = new VehicleReservationEntities())            {                alreadyReservedVehicle = db.usp_PreventDoubleBooking(selectedVehicle.ID, reservation.StartDate, reservation.EndDate).ToList();                                         }        }        if (alreadyReservedVehicle.Count() == 0) // create a new reservation if the vehicle is available at the selected date and time        {            db.Reservations.Add(reservation);            reservation.LastChangedDate = DateTime.Now;            db.SaveChanges();                }    }}以上是我到目前為止所擁有的,我知道我已經接近了,因為假設用戶只是試圖預訂一輛已經預訂的車輛,我所擁有的將起作用。當他們嘗試為多輛車創建預訂時,代碼僅計算列表中的最后一輛車,并將其用作確定是否保存預訂的結果。我考慮將條件語句移動到 foreach 中,但我不希望為每輛選擇的車輛保存預訂......這沒有任何意義,因為只有 1 個預訂要保存,它只是有多個可以與之關聯的車輛。那么如何才能alreadyReservedVehicle List將每個結果添加到列表中,以便確定List實際的 a是否Count為 0?
查看完整描述

2 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

public ActionResult Create(/*Bind attribute omitted*/ Reservations reservation)

{

    if (ModelState.IsValid)

    {

        // Is 'IsChecked' nullable? If not, "== true" is redundant.

        var selectedVehicles = reservation.VehicleList.Where(x => x.IsChecked == true).ToList();


        // get each vehicle that was selected to be reserved then check db to make sure it is available

        using (VehicleReservationEntities db = new VehicleReservationEntities())

        {

            foreach (var selectedVehicle in selectedVehicles)

            {

                // 'alreadyReservedVehicle' can be declared here because you don't need to let it

                // out of its cage, I mean the loop.

                List<usp_PreventDoubleBooking_Result> alreadyReservedVehicle =

                    db.usp_PreventDoubleBooking(selectedVehicle.ID, reservation.StartDate, reservation.EndDate).ToList();


                if (alreadyReservedVehicle.Count() > 0)

                {

                    //return error message on page if vehicle is already reserved

                    TempData["Error"] = "Double booking of vehicles is not allowed. Please choose another vehicle/time. Check the availability timeline before reserving to ensure there are no errors. Thank you.";

                    return RedirectToAction("Create");

                }

            }

        }


        // create a new reservation if the vehicle is available at the selected date and time

        db.Reservations.Add(reservation);

        reservation.LastChangedDate = DateTime.Now;

        db.SaveChanges();

    }

}


查看完整回答
反對 回復 2022-06-19
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

您可以執行以下操作:

var preventDoubleBookingList= await context.Database.SqlQuery<usp_PreventDoubleBooking>("sproc_name", prams_here).ToListAsync();

您必須創建一個與存儲過程匹配的模型。


查看完整回答
反對 回復 2022-06-19
  • 2 回答
  • 0 關注
  • 121 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號