0

我有一個關於的問題WCF DataService實體框架4.1(代碼優先)。 所以我有Web服務器上的DataService:WCF數據服務和實體框架代理對象

[ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class CrmDataService : DataService<CrmDataContext> 
    { 
     private static CrmDataContext _mdc; 
     public static void InitializeService(DataServiceConfiguration config) 
     { 
      config.SetEntitySetAccessRule("*", EntitySetRights.All); 
      config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; 
      config.UseVerboseErrors = true; 
     } 

     protected override CrmDataContext CreateDataSource() 
     { 
      _mdc = new CrmDataContext(@"Data Source=localhost;Database=MyDb;User Id=sqluser;Password=111111;") { TablePrefix = "crm_" }; 
      _mdc.Configuration.ProxyCreationEnabled = false; 
      return _mdc; 
     } 

我也有實體對象的列表使用我的CrmDataContext(如公司,地址,人員等) 添加此服務爲我的客戶端應用程序之後(到服務命名空間例如)我有相同的實體對象,但在服務命名空間。當然,我想通過數據服務獲取任何公司對象(例如),它會從命名空間服務返回一組實體對象。

所以我的問題是如何告訴數據服務使用我的真實實體對象,而不是在我的項目中創建這些其他代理對象? 如果無法做到,那我該如何將從數據服務獲得的對象複製到我的真實實體中?

我的目標是通過使用數據上下文的數據服務從服務器獲取一些實體對象,而不是在客戶端使用它們。我想爲本地和服務器端的所有實體對象使用一個程序集。

回答

3

如果要使用相同的對象,則不需要將該服務添加到客戶端應用程序中。只需將包含類型的程序集添加到引用的程序集中,然後在客戶端應用程序中使用服務uri創建DataServiceContext。

你將不得不做這樣的事情:

context.CreateQuery(entitysetName)。

T是您在服務和客戶端之間使用的常見類型。

有一點需要記住,如果實體中的鍵不遵循約定,則可能需要在該類型上添加DataServiceKeyAttribute或DataServiceEntityAttribute。

希望這會有所幫助。

謝謝 Pratik

+0

Pratik,非常感謝你!我用你的解決方案解決了這個問題。 – DolceVita 2011-06-07 19:44:59