我有MVC項目,它依賴於webservices來提供數據,這些webservices基於CMIS規範和自定義功能。我有幾個用作DataContracts的類,當我添加對我打電話的服務的引用時,這些類是由Visual Studio創建的。我將該類用作模型,以確保能夠將實例發送到服務並正確處理發回給我的那些實例。使用DataAnnotations驗證繼承的屬性
我也有編輯這些類的實例的意見,我想使用DataAnnotations來驗證表單(通常[Required]屬性,有時顯示名稱更改)。
我不想把這些屬性放在服務引用文件中,因爲更新引用意味着我將失去這些屬性(至少我不能確定引用更新後所有東西都是一樣的)。
我的想法是創建子類,它只會作爲工具將DataAnnotations引入到屬性中,我知道我肯定會使用這些類型(肯定不會從DataContract類中消失)。我將如何完成代碼的這種繼承?
例子 - 我有這個類由VS在reference.cs文件中創建:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="LibraryRequest", Namespace="http://schemas.datacontract.org/2004/07/Agamemnon.Models")]
[System.SerializableAttribute()]
public partial class LibraryRequest : DocuLive.RepositoryServiceExt.Library {
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string PasswordField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string ServerField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private bool UseDefaultField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string UserNameField;
[System.Runtime.Serialization.DataMemberAttribute()]
public string Password {
get {
return this.PasswordField;
}
set {
if ((object.ReferenceEquals(this.PasswordField, value) != true)) {
this.PasswordField = value;
this.RaisePropertyChanged("Password");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string Server {
get {
return this.ServerField;
}
set {
if ((object.ReferenceEquals(this.ServerField, value) != true)) {
this.ServerField = value;
this.RaisePropertyChanged("Server");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public bool UseDefault {
get {
return this.UseDefaultField;
}
set {
if ((this.UseDefaultField.Equals(value) != true)) {
this.UseDefaultField = value;
this.RaisePropertyChanged("UseDefault");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string UserName {
get {
return this.UserNameField;
}
set {
if ((object.ReferenceEquals(this.UserNameField, value) != true)) {
this.UserNameField = value;
this.RaisePropertyChanged("UserName");
}
}
}
}
我想,以確保無論在reference.cs文件有什麼變化(甚至是類本身),我會我的「編輯」和「刪除」表單中始終有用戶名,密碼和服務器標記爲[必需]。
在此先感謝
洪扎
我不願意NAD碼datacontracts因爲還有很多的服務的變化,這將迫使我一個星期重寫datacontracts幾次。我絕對喜歡viewModel的建議,我會試一試 - 我仍然需要做一些調整,但看起來它會少得多。 – Erchi 2013-05-17 11:38:24