2011-04-09 79 views
1

如果我有這樣的通過wcf創建對象時隱藏id屬性?

public void AddUser(User user) 
{ 
     user.Id = Guid.NewGuid(); 
     _userList.Add(user); 
} 

和用戶類簡單的add方法一樣

[DataContract] 
public class User 
{ 

    [DataMember] 
    public Guid Id { get; set; } 
    [DataMember] 
    public string FirstName { get; set; } 
    [DataMember] 
    public string LastName { get; set; } 
    [DataMember] 
    public DateTime DateCreated { get; set; }   
} 

是否有可能隱藏用戶ID添加新對象時。 我知道我可以通過參數化輸入法(發送每個對象屬性作爲輸入參數)來實現這一點,但我不認爲這符合wcf模型。如果我有很多屬性呢?這只是一個簡單的例子。


wcf test client screen

回答

0

希望我的意見讓你的感覺,或者你的開發範圍。

好吧,我認爲你的guid應該在你的add方法中生成,而不是在對象屬性中傳遞。我給這個方法提供了判斷生成的GUID是否有效的可能性,你可以嘗試新的GUID,直到你得到一個有效的GUID。

我不知道是否有可能隱藏在這個工具中,因爲你已經標記爲DataMember的ID,這意味着你的財產變得availabe。

如果先前的消解對您有意義,請在此方法中忘記此值。如果不是我能看到的唯一解決方案是創建一個沒有此成員的新類。

希望它可以幫助你

+0

我在裏面創建Guid添加方法。問題在於它通過User.Id屬性暴露給wcf客戶端。 Wcf客戶端可以看到整個用戶對象廣告方法參數。 – nemke 2011-04-09 09:51:24

+0

你可以通過另一種方式改變你的add方法,而不是傳遞一個類,在add方法上創建多個參數。只有當你必須傳遞很多參數時,問題纔會變成!!,因爲你的例子使得我可以舒適地將更多的參數傳遞給這個方法!並解決問題! – 2011-04-09 10:03:31

0

如果你刪除[數據成員]屬性,那麼GUID將無法使用WCF,因爲它不會被序列化。 但是,如果在服務的任一側使用用戶對象(如果它們綁定到後端數據庫),是否會出現問題?你不會一直在創建新的用戶對象嗎?

1

是否可以在添加新對象時隱藏用戶標識。我知道我可以通過參數化輸入方法(發送每個對象屬性作爲輸入參數)來實現這一點,但我不認爲這符合wcf模型。

除了使用相同DTO或甚至一個實體對象本身爲服務Get方法和Add方法的,最好是具有

單獨UserResult DTO爲GetUser方法:

public class UserResult 
    public ID as Guid 
    public FirstName as String 
    public LastName as String 
    public DateCreated as DateTime 
end class 

public class UserService 
    public function GetUser(ID as Guid) as UserResult 
end class 

和另外的UserAddCommand DTO對於AddUser方法:

public class UserAddCommand 
    public FirstName as String 
    public LastName as String 
end class 

public class UserService 
    public function AddUser(Command as UserAddCommand) as Response 
end class 

用戶的ID乃至DateCreated都是在服務端創建的,服務方式爲AddUser

+0

你剛剛回答了一個五年的問題嗎? :P – CodeCaster 2016-01-09 13:27:05