实体框架数据未使用 Wcf 服务保存或更新

我正在尝试使用 WCF 服务中的实体框架 6.2.0 更新新数据并将新数据添加到我的 SQL Server 数据库中,然后在我的应用程序中使用该服务。


虽然数据已成功获取,但添加或更新数据不起作用。我正在使用此处显示的方法进行更新。我在其他项目中使用过相同的方法并且它曾经有效。我在这里可能做错了什么?


响应:有趣的是我得到 1 作为回报,这意味着数据已更新。但实际上数据并没有更新!


public int EditSaveCategory(Category category)

{

        try

        {

            int r = 0;


            using (Intelliventory_DBEntities context = new Intelliventory_DBEntities())

            {

                var cat = context.Categories.FirstOrDefault(x => x.CategoryID == category.CategoryID);


                if (cat != null)

                {

                    cat.CategoryName = category.CategoryName;

                    r = context.SaveChanges();

                    // return 1;

                }

            }


            return r;

        }

        catch (Exception e)

        {

            throw new FaultException<IntelliWcfException>(GetIntelliWcfException(e));

        }

    }  

从应用程序调用:


var cat = new Category

{

    CategoryName = SelectedCategory.CategoryName.Trim(),

    CategoryID = SelectedCategory.CategoryID

};

_client.EditSaveCategoryAsync(cat);  

回复 :


private void ClientOnEditSaveCategoryCompleted(object sender, EditSaveCategoryCompletedEventArgs e)

{

        try

        {

            if (e.Error == null)

            {

                var response = e.Result;


                if (response == 1)

                {

                    Growl.SuccessGlobal("Category Saved !");

                }

                else if (response == 2)

                {

                    Growl.ErrorGlobal("Category Not Found !");

                }

                else

                {

                    Growl.ErrorGlobal("Error !");

                } 

            }

        }

        catch (Exception exception)

        {

            Console.WriteLine(exception);

            throw;

        }

}  


慕娘9325324
浏览 86回答 3
3回答

蛊毒传说

之前添加这个context.savechanges()context.Entry(cat).State&nbsp;=&nbsp;System.Data.Entity.EntityState.Modified;

慕姐8265434

在您调用的地方EditSaveCategoryAsync,您的SelectedCategory对象(大概)是您从数据库中检索到的对象。然后,您在数据库中选择同一行:-x => x.CategoryID == category.CategoryID并使用已有的相同值(或基于您的 UI 代码的某些变体)更新它:-cat.CategoryName = category.CategoryName;SaveChanges将指示您的对象已被修改(因为您已经在跟踪对象上设置了属性,尽管设置为相同的值),但是当您检查数据库时,它似乎尚未更新,因为它已设置为已经设置的内容曾是。要更新,您的调用代码应该是这样的:-var cat = new Category{&nbsp; &nbsp; CategoryName = "New name", // or value from some other control&nbsp; &nbsp; CategoryID = SelectedCategory.CategoryID};_client.EditSaveCategoryAsync(cat);

慕村9548890

你的代码段没有问题。我尝试使用你的代码并更新我的数据库,它运行得很好。我认为类别表肯定应该更新。我唯一怀疑的是连接字符串,请检查您的连接字符串,并确保您正在修改的数据库是您正在连接的数据库,然后刷新您的数据库表。另外,由于WCF是由IIS托管的,不使用集成安全性来连接数据库,我们最好使用用户名/密码模式来连接。最后,我建议您添加一个断点来调试并检查代码是否成功检索数据并更新条目。
打开App,查看更多内容
随时随地看视频慕课网APP