2012-06-08 38 views
1

我在玩WCF 4.0。我有一個簡單的服務與以下作爲DataContract:DataContract在專用數據訪問層類中使用?

[DataContract] 
public class WeeklySchedule 
{ 
    [DataMember] 
    public DateTime DateMon; 
    [DataMember] 
    public string DishMon; 
    [DataMember] 
    public DateTime DateTue; 
    [DataMember] 
    public string DishTue; 
    [DataMember] 
    public DateTime DateWed; 
    [DataMember] 
    public string DishWed; 
    [DataMember] 
    public DateTime DateThu; 
    [DataMember] 
    public string DishThu; 
    [DataMember] 
    public DateTime DateFri; 
    [DataMember] 
    public string DishFri; 
} 

我想構建一個單獨的類庫來容納數據庫訪問方法。我想要這些方法返回WeeklySchedule對象。

我該如何避免循環引用?

如果我將DAL類引用到WCF服務中,我可以使用db methodss,但是DAL類不能「查看」DataContract類。

+1

您可以將WeeklySchedule視爲DTO並從yourDB實體填充它。無論是在經理類還是某種適配器風格的東西。 –

+0

如果我讓你覺得我在OOP方面有足夠的經驗... :),我很抱歉,你能寫一些關於你的建議的東西嗎? – e4rthdog

+0

你的意思是不要在我的DAL類中使用WeeklySchedule類,並返回一個普通列表作爲例子? – e4rthdog

回答

2

我們增加了第三層,我們稱之爲應用程序。它可以訪問DTO(您的問題中定義的類)和數據層。然後,應用程序層就可以看到一切。它從數據層獲取數據,並在將數據合同返回給調用者之前填充數據合同。所以它會完成大部分的服務工作。

這可以避免您的循環引用。 :)

+0

但是WCF需要datacontract聲明,不是嗎?我的意思是,如果我在上面的DAL和WCF的WCF必須如何操作的單獨的類中p出datacontract? – e4rthdog

+0

數據從DAL返回,它是(作爲示例)實體對象。然後在應用層中將數據從實體對象移動到數據合同對象。這就是返回的內容,這也是WCF需要的。 –

+0

如何將ready datacontract返回給wcf。在wcf代碼中,我是否擁有datacontract類的聲明?或者我會有別的東西? – e4rthdog

0

由於我缺乏知識,我認爲如果我從WCF服務類中分離DataContract和ServiceContract類,我會有問題。

我的問題的解決方案是爲合同創建一個通用的類庫,讓他們通過WCF類或數據訪問層類訪問。