我有這個很常見的問題。我有POCO人員課程。WCF處理人對象更新
[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,年齡= 15。
想象一下,我有這樣的客戶端代碼,在這種情況下,我只想更新人的年齡,並保留所有其他字段。
Person p = new Person{id=1,Age=26;}
PersonManagerService service=new PersonManagerService();
service.UpdatePerson(p);
現在,一旦這個代碼運行,我將有問題的SQL statment將運行,並且將更新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;}
}
客戶端代碼的更新Person對象將是現在
UpdatePerson p = new UpdatePerson{id=1,IsAgeSpecified=true,Age=26;}
PersonManagerService service=new PersonManagerService();
service.UpdatePerson(p);
我知道這會工作,但我真的不喜歡這種方法,你現在用的updatePerson處理,而比一個人。有沒有人有更好的方法建議?
是什麼驅動部分更新的要求?年齡/孩子是否可選,或者在進入時是未知的,並且將在以後知道? –