我有这个很常见的问题。我有 POCO 人班。
[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。有人对更好的方法有任何建议吗?