我有一个很常见的问题。我有 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/