Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.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# 在应用程序重新启动之前,Context.SaveChanges()不起作用_C#_Wcf_Entity Framework_Mvvm - Fatal编程技术网

C# 在应用程序重新启动之前,Context.SaveChanges()不起作用

C# 在应用程序重新启动之前,Context.SaveChanges()不起作用,c#,wcf,entity-framework,mvvm,C#,Wcf,Entity Framework,Mvvm,我在做一些酒店应用程序。我有一个列表视图和一些列,其中一列是复选框列。单击该复选框时,所选项目将从ListView中删除。 另外,当我点击该复选框时,我从WCF服务调用了一个不太好用的方法。在数据库中,我有一个表tblStay,其中有一个名为IsFinished的布尔列。我需要在单击复选框后将该列设置为True。现在这很奇怪:在我打开断点并检查是否一切正常后,它实际上运行良好。字段IsFinished的值为True,但在my db中它仍然设置为false。然后我重新启动应用程序并再次执行相同的操

我在做一些酒店应用程序。我有一个列表视图和一些列,其中一列是复选框列。单击该复选框时,所选项目将从ListView中删除。 另外,当我点击该复选框时,我从WCF服务调用了一个不太好用的方法。在数据库中,我有一个表tblStay,其中有一个名为IsFinished的布尔列。我需要在单击复选框后将该列设置为True。现在这很奇怪:在我打开断点并检查是否一切正常后,它实际上运行良好。字段IsFinished的值为True,但在my db中它仍然设置为false。然后我重新启动应用程序并再次执行相同的操作,然后它在我的数据库中保存为True。而且情况并非总是如此。有时它保存正确,但在大多数情况下,它不能正常工作。这是我的密码:

视图模型:

周转基金:


为什么会发生这种情况?

您是否尝试使用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;
        }
    }