WCF 句柄更新人员对象

标签 wcf web

我有一个很常见的问题。我有 POCO person 类(class)。

 [DataContract]
public class Person
{
 [DataMember(IsRequired = true)]
 public int id{get;set;}

 [DataMember]
 public decimal? Age{get;set;}

 [DataMember]
 public decimal? NumberOfChildren{get;set;}
}

我有WCF操作,就是这个

public class PersonManagerService
{    public void UpdatePerson(Person person)
    {
    //performs sql to update person in db
    }
}

3) 现在假设数据库中有一条 id=1、NumberOfChildren=5、Age=15 的人员记录。

想象一下我有这样的客户端代码,在这种情况下我只想更新该人的年龄并保留所有其他字段不变

  Person p = new Person{id=1,Age=26;}
   PersonManagerService service=new PersonManagerService();
   service.UpdatePerson(p);

现在,一旦此代码运行,我将遇到的问题是 sql 语句将运行并将 NumberOfChildren 更新为 NULL。现在我知道我可以添加空检查来防止这种情况发生,这很简单。但是我想要的是,如果我指定字段具有空值,则更新应设置为空值,如果未设置,则对该字段不执行任何操作。所以我想我需要做这样的事情。创建一个更新人员对象,其中包含此

   [DataContract]
    public class UpdatePerson
    {
     [DataMember(IsRequired = true)]
     public int id{get;set;}

     public bool IsAgeSpecified{get;set;}

     [DataMember]
     public decimal? Age{get;set;}

     public bool IsNumberOfChildrenSpecified{get;set;}

     [DataMember]
     public decimal? NumberOfChildren{get;set;}
    }

客户端代码现在是这样的

   UpdatePerson p = new UpdatePerson{id=1,IsAgeSpecified=true,Age=26;}
   PersonManagerService service=new PersonManagerService();
   service.UpdatePerson(p);

我知道这会起作用,但我不太喜欢这种方法,因为你现在处理的是 updatePerson 而不是 Person。有人对更好的方法有任何建议吗?

最佳答案

您缺少识别人员身份的步骤。你从哪里想到 id = 1 的?

例如:

   PersonManagerService service=new PersonManagerService();
   Person p = service.findPersonByNumberOfChildren(5);
   p.Age = 26;
   service.UpdatePerson(p);

关于WCF 句柄更新人员对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17597169/

相关文章:

c# - 简化异常处理

python - webbrowser python 在同一选项卡中打开新的 url。这有用吗?

wcf - 为什么缓存 WCF channel 是一件坏事?

java - 从.Net客户端调用Java Web服务来获取byte[](有Java示例)

c# - 在 project-server 2013 中创建任务的远程前置事件处理程序不起作用

php - 从哪儿开始?建立一个使用数据库的网站

javascript - 是否有与 Opera 快速拨号功能等效的 JavaScript?

c# - 我如何在 WCF 客户端中签署 SOAP header

c# - WCF 到数据库连接

html - 通过 FTP 更改文件后网页不更新