2011-09-07 108 views
0

假設我有一個linq到sql類。我想通過wcf返回對象的datacontext。我已經使數據庫成爲單向的。如果我註釋掉有關ToolboxDataContext的所有內容,我將WCF的作品getString()僅用於演示wcf服務的工作原理。wcf發送linq到sql DataContext

 
public interface Database() 
{ 
    [OperationContract] 
    ToolboxDataContext getCtx(); 

    [OperationContract] 
    string getString(); 
} 
public class test: Database 
     public ToolboxDataContext getCtx() 
     { 

      ToolboxDataContext ctx = new ToolboxDataContext(); 
      return ctx; 
     } 
public string getString() 
     { 
      return "WCF WORKS"; 
     } 


[DataContract] 
    public class Testing //my svc file 
    { 
     [DataMember] 
     public ToolboxDataContext ctx; 
     [DataMember ] 
     public string Id; 
    } 
+2

你說你的問題中的LINQ到SQL,所以我標記了這個問題。但是在下面的一個評論中,你說實體框架。不是一回事。 –

回答

3

是你的ToolboxDataContext Entity Framework的DataContext?假設它是...

我不確定通過網絡發送整個數據上下文對象真的是你想要做的。它很可能不會從收到它的客戶那裏「工作」。就像你一樣,你將無法運行Linq語句並且觸發數據庫任何東西......你可能只想返回數據實體(不是整個上下文),如here (MSDN),或者考慮使用WCF Data Services來代替?

我想一個很好的問題是;客戶端將如何處理DataContext?

+0

+1它*絕對*不會'工作' –

+0

客戶端應該能夠在不知道數據庫憑證的情況下進行CRUD。是實體框架。 – hidden

+0

感謝您提供數據服務鏈接。我深知這項技術。 – hidden

0

這似乎並非是一個真正的問題(你有什麼問題,什麼都問這個?)

不過,假設這個您要反饋就是你有一個想法 - 這不合理。這相當於向客戶端發送數據庫連接。您無法序列化&反序列化連接,然後重新使用它。

datacontext是一個對象,所以你應該能夠序列化它,一旦你確保它用正確的屬性裝飾,但它封裝了一個數據庫連接。數據庫連接無法序列化。從概念上講,描述該連接的所有信息都可以通過WCF序列化並提供,但這可能會暴露系統中的安全漏洞。

使用LINQ-to-SQL DataContext的正確模式是實例化它,執行所需的任何數據庫操作並將其處置。最好不要長期堅持下去,絕對不要將它發佈在您的服務之外。

+0

感謝您的回覆。基本上,我在問如何與數百個應用程序共享一個數據上下文。這樣你就不必爲每個應用程序創建一個datacontexgt。如果數據庫結構發生變化,我將不得不更新100個數據環境,而不是提供上下文的服務。 – hidden

+0

您的服務應通過應用程序檢索數據提供操作。應用程序本身不應該訪問數據庫。 –