WCF数据服务和实体框架代理对象

问题描述:

我有一个关于的问题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(如公司,地址,人员等) 添加此服务为我的客户端应用程序之后(到服务命名空间例如)我有相同的实体对象,但在服务命名空间。当然,我想通过数据服务获取任何公司对象(例如),它会从命名空间服务返回一组实体对象。

所以我的问题是如何告诉数据服务使用我的真实实体对象,而不是在我的项目中创建这些其他代理对象? 如果无法做到,那我该如何将从数据服务获得的对象复制到我的真实实体中?

我的目标是通过使用数据上下文的数据服务从服务器获取一些实体对象,而不是在客户端使用它们。我想为本地和服务器端的所有实体对象使用一个程序集。

如果要使用相同的对象,则不需要将该服务添加到客户端应用程序中。只需将包含类型的程序集添加到引用的程序集中,然后在客户端应用程序中使用服务uri创建DataServiceContext。

你将不得不做这样的事情:

context.CreateQuery(entitysetName)。

T是您在服务和客户端之间使用的常见类型。

有一点需要记住,如果实体中的键不遵循约定,则可能需要在该类型上添加DataServiceKeyAttribute或DataServiceEntityAttribute。

希望这会有所帮助。

谢谢 Pratik

+0

Pratik,非常感谢你!我用你的解决方案解决了这个问题。 – DolceVita 2011-06-07 19:44:59