Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何链接到数据库中的项,而不再创建相同的项_C#_Linq_Asp.net Mvc 4_Razor_Local Database - Fatal编程技术网

C# 如何链接到数据库中的项,而不再创建相同的项

C# 如何链接到数据库中的项,而不再创建相同的项,c#,linq,asp.net-mvc-4,razor,local-database,C#,Linq,Asp.net Mvc 4,Razor,Local Database,我只是C#、MVC4、razor和Linq的初级程序员。现在我正忙着为一家不存在的酒店构建一个应用程序。而应用程序的工作方式几乎与设想的一样。但有一个小错误。创建预订时,我希望将房间和客人列表链接到预订。但每次我创建新预订时,都会在数据库中创建一个新房间,除了id之外,所有内容都是相同的。对于客人来说,这是相同的,如果我创建一个新预订,那么客人也会在数据库中创建,而不会链接到预订。我已经使用了调试器和对象室,列表完美地传递给了预订的创建。所以我的预订创建方法一定出了问题。我无法找出我的Creat

我只是C#、MVC4、razor和Linq的初级程序员。现在我正忙着为一家不存在的酒店构建一个应用程序。而应用程序的工作方式几乎与设想的一样。但有一个小错误。创建预订时,我希望将房间和客人列表链接到预订。但每次我创建新预订时,都会在数据库中创建一个新房间,除了id之外,所有内容都是相同的。对于客人来说,这是相同的,如果我创建一个新预订,那么客人也会在数据库中创建,而不会链接到预订。我已经使用了调试器和对象室,列表完美地传递给了预订的创建。所以我的预订创建方法一定出了问题。我无法找出我的Create方法有什么问题。所以我希望能在这里找到一些帮助。任何帮助都将不胜感激

其他资料: TempStore是一个静态类,我在其中保存一些临时变量

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Booking booking)
    {
        if (ModelState.IsValid)
        {
            if (TempStore.tempGuests.Count == 0 || TempStore.tempRoom == null)
            {
                ModelState.AddModelError("NoGuestsSelected", "Please select the persons for your room.");
                ModelState.AddModelError("NoRoomSelected", "Please select a room for your booking.");
                return View();
            }
            else
            {
                booking.Room = TempStore.tempRoom;
                booking.Guests = TempStore.tempGuests;
                booking.PriceTotal = TempStore.priceTotal;
                booking.AveragePrice = TempStore.averagePrice;
                booking.StartDate = TempStore.startDate;
                booking.EndDate = TempStore.endDate;

                db.Bookings.Add(booking);
                db.SaveChanges();

                //Clearing the TempStore cause everything has been added
                TempStore.tempGuests.Clear();
                TempStore.tempRoom = null;

                return RedirectToAction("Index");
            }
        }

        return View(booking);
    }
这是我的临时商店

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Hotel.Models
{
    public static class TempStore
    {
        public static Room tempRoom;
        public static ICollection<Guest> tempGuests = new List<Guest>();
        public static DateTime startDate;
        public static DateTime endDate;
        public static decimal priceTotal;
        public static decimal averagePrice;
    }
}
这是我为预订设置房间的地方:

    public ActionResult AddRoom(int id)
    {
        Room r = db.Rooms.Find(id);
        TempStore.tempRoom = r;
        return RedirectToAction("SelectGuest");
    }

基本上你得有办法确定它是重复的。这取决于您的数据模型,但如果您知道字段是唯一的,则可以在保存新记录之前搜索匹配的记录

它可能不整洁。但是我的问题解决了。我要感谢大家的帮助

我就是这样解决的:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Booking booking)
    {
        if (ModelState.IsValid)
        {
            if (TempStore.tempGuests.Count == 0 || TempStore.tempRoom == null)
            {
                ModelState.AddModelError("NoGuestsSelected", "Please select the persons for your room.");
                ModelState.AddModelError("NoRoomSelected", "Please select a room for your booking.");
                return View();
            }
            else
            {
                booking.PriceTotal = TempStore.priceTotal;
                booking.AveragePrice = TempStore.averagePrice;
                booking.StartDate = TempStore.startDate;
                booking.EndDate = TempStore.endDate;

                db.Bookings.Add(booking);
                db.SaveChanges();

                booking.Guests = new List<Guest>();

                foreach(Guest g in TempStore.tempGuests)
                {
                    db.Bookings.Find(booking.Id).Guests.Add(db.Guests.Find(g.Id));
                }

                db.Bookings.Find(booking.Id).Room = db.Rooms.Find(TempStore.tempRoom.Id);
                db.Entry(booking).State = EntityState.Modified;
                db.SaveChanges();

                //Clearing the TempStore cause everything has been added
                TempStore.tempGuests.Clear();
                TempStore.tempRoom = null;

                return RedirectToAction("Index");
            }
        }

        return View(booking);
    }
[HttpPost]
[ValidateAntiForgeryToken]
公共行动结果创建(预订)
{
if(ModelState.IsValid)
{
if(TempStore.tempGuests.Count==0 | | TempStore.tempRoom==null)
{
AddModelError(“NoGuestsSelected”,“请为您的房间选择人员”);
AddModelError(“NoRoomSelected”,“请为您的预订选择一个房间。”);
返回视图();
}
其他的
{
booking.PriceTotal=TempStore.PriceTotal;
booking.AveragePrice=TempStore.AveragePrice;
booking.StartDate=TempStore.StartDate;
booking.EndDate=TempStore.EndDate;
db.Bookings.Add(预订);
db.SaveChanges();
booking.Guests=新列表();
foreach(临时商店中的客人g.临时客人)
{
db.Bookings.Find(booking.Id).Guests.Add(db.Guests.Find(g.Id));
}
db.Bookings.Find(booking.Id).Room=db.Rooms.Find(TempStore.tempRoom.Id);
db.Entry(booking.State=EntityState.Modified;
db.SaveChanges();
//正在清除临时存储区,因为所有内容都已添加
TempStore.tempGuests.Clear();
TempStore.tempRoom=null;
返回操作(“索引”);
}
}
返回视图(预订);
}

是否存在创建重复房间的错误?此外,我们还需要更多信息。预订的性质是什么?什么是TempStore?我认为问题在于TempStore是如何创建房间的。您可以发布TempStore代码吗?@user1666620:错误是创建了重复的房间,并且有重复的用户。预订不包含任何属性。@RufusL我按照你的要求发布了我的临时商店。我一定错过了什么。没有任何东西填充TempStore。房间属性?这是一行:
booking.Room=TempStore.tempRoom等效于:
booking.Room=null?它不是重复的Tempstore中的所有内容都与我的数据库中的相同。在我将它们添加到数据库后,id发生了变化。但是现在我解决了我的问题,如果你仍然对错误感兴趣,请参阅下面的答案。
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Booking booking)
    {
        if (ModelState.IsValid)
        {
            if (TempStore.tempGuests.Count == 0 || TempStore.tempRoom == null)
            {
                ModelState.AddModelError("NoGuestsSelected", "Please select the persons for your room.");
                ModelState.AddModelError("NoRoomSelected", "Please select a room for your booking.");
                return View();
            }
            else
            {
                booking.PriceTotal = TempStore.priceTotal;
                booking.AveragePrice = TempStore.averagePrice;
                booking.StartDate = TempStore.startDate;
                booking.EndDate = TempStore.endDate;

                db.Bookings.Add(booking);
                db.SaveChanges();

                booking.Guests = new List<Guest>();

                foreach(Guest g in TempStore.tempGuests)
                {
                    db.Bookings.Find(booking.Id).Guests.Add(db.Guests.Find(g.Id));
                }

                db.Bookings.Find(booking.Id).Room = db.Rooms.Find(TempStore.tempRoom.Id);
                db.Entry(booking).State = EntityState.Modified;
                db.SaveChanges();

                //Clearing the TempStore cause everything has been added
                TempStore.tempGuests.Clear();
                TempStore.tempRoom = null;

                return RedirectToAction("Index");
            }
        }

        return View(booking);
    }