C# 在应用程序重新启动之前,Context.SaveChanges()不起作用
我在做一些酒店应用程序。我有一个列表视图和一些列,其中一列是复选框列。单击该复选框时,所选项目将从ListView中删除。 另外,当我点击该复选框时,我从WCF服务调用了一个不太好用的方法。在数据库中,我有一个表tblStay,其中有一个名为IsFinished的布尔列。我需要在单击复选框后将该列设置为True。现在这很奇怪:在我打开断点并检查是否一切正常后,它实际上运行良好。字段IsFinished的值为True,但在my db中它仍然设置为false。然后我重新启动应用程序并再次执行相同的操作,然后它在我的数据库中保存为True。而且情况并非总是如此。有时它保存正确,但在大多数情况下,它不能正常工作。这是我的密码: 视图模型: 周转基金:C# 在应用程序重新启动之前,Context.SaveChanges()不起作用,c#,wcf,entity-framework,mvvm,C#,Wcf,Entity Framework,Mvvm,我在做一些酒店应用程序。我有一个列表视图和一些列,其中一列是复选框列。单击该复选框时,所选项目将从ListView中删除。 另外,当我点击该复选框时,我从WCF服务调用了一个不太好用的方法。在数据库中,我有一个表tblStay,其中有一个名为IsFinished的布尔列。我需要在单击复选框后将该列设置为True。现在这很奇怪:在我打开断点并检查是否一切正常后,它实际上运行良好。字段IsFinished的值为True,但在my db中它仍然设置为false。然后我重新启动应用程序并再次执行相同的操
为什么会发生这种情况?您是否尝试使用context.Entrystay.State=EntityState.Added;,仅使用一个context.SaveChanges;并在函数外部实例化上下文?我不能在我的EF版本中使用它,所以我这样做了:var contactEntry=context.ObjectStateManager.getobjectstatentrystay;contactEntry.ChangeStateSystem.Data.EntityState.Modified;关于context.SaveChanges;当我试图解决这个问题时,我用了两次,所以忘了在这里删除它。仍然不起作用,并且我没有在我的数据库中添加新记录,我只是更新了已有的记录。您使用的是哪个版本的EF?代码中没有事务,因此在调用context.SaveChanges时,对象似乎没有标记为已更改,因此EF不会更改数据库。如果您创建了一个新实例,它是否有效,例如context.tblStays.addanewistance;?
private ServiceReference1.tblStayGuest mainGuest;
public ServiceReference1.tblStayGuest MainGuest //bound as selected item in ListView
{
get
{
return mainGuest;
}
set
{
mainGuest = value;
OnPropertyChanged("MainGuest");
}
}
private ObservableCollection<ServiceReference1.tblStayGuest> mainGuests;
public ObservableCollection<ServiceReference1.tblStayGuest> MainGuests //bound as items source in ListView
{
get
{
return mainGuests;
}
set
{
mainGuests = value;
OnPropertyChanged("MainGuests");
}
}
private ICommand _FinishedStay; // this command is bound to my CheckBox column in listview
public ICommand FinishedStay
{
get
{
if (_FinishedStay == null)
{
_FinishedStay = new DelegateCommand(delegate()
{
try
{
ServiceReference1.Service1Client wcf = new ServiceReference1.Service1Client();
MainGuest.IsMainGuest = false;
wcf.FinishedStay(MainGuest);
if (MainGuest.tblStay.IsFinished == true)
{
MainGuests.Remove(MainGuest);
}
wcf.Close();
}
catch
{
Trace.WriteLine("working...", "MyApp");
}
});
}
return _FinishedStay;
}
}
bool IService1.FinishedStay(tblStayGuest mainGuest)
{
try
{
context = new HotelBaseEntities();
//tblStayGuest stGuest = (from stg in context.tblStayGuests where stg.StayGuestID == mainGuest.StayGuestID select stg).FirstOrDefault();
tblStay stay = (from st in context.tblStays where st.StayID == mainGuest.StayID select st).FirstOrDefault();
tblGuest guest = (from g in context.tblGuests where g.GuestID == mainGuest.GuestID select g).FirstOrDefault();
tblBooking book = (from b in context.tblBookings where b.GuestID == mainGuest.GuestID select b).FirstOrDefault();
tblRoom room = (from r in context.tblRooms where r.RoomID == mainGuest.tblStay.RoomID select r).FirstOrDefault();
guest.IsCheckedOut = true;
mainGuest.IsMainGuest = false;
stay.IsFinished = true;
book.IsActive = false;
book.IsCanceled = true;
room.RoomStatus = false;
context.SaveChanges();
var contactEntry = context.ObjectStateManager.GetObjectStateEntry(stay);
contactEntry.ChangeState(System.Data.EntityState.Modified);
List<tblStayGuest> GuestsInRoom = (from gs in context.tblStayGuests where gs.StayID == mainGuest.StayID select gs).ToList();
foreach (tblStayGuest stayG in GuestsInRoom)
{
tblGuest guestToCheck = (from gtc in context.tblGuests where gtc.GuestID == stayG.GuestID select gtc).FirstOrDefault();
guestToCheck.IsCheckedOut = true;
context.SaveChanges();
}
context.SaveChanges();
return true;
}
catch (Exception e)
{
e.StackTrace.ToString();
return false;
}
}