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