【问题标题】:WCF Data Service and Entity Framework proxy objectsWCF 数据服务和实体框架代理对象
【发布时间】:2011-06-07 13:36:14
【问题描述】:

我有一个关于 WCF DataServiceEntity Framework 4.1(代码优先) 的问题。 所以我在 Web 服务器上有一个 DataService:

 [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 使用的实体对象列表(例如公司、地址、个人等) 将此服务添加到我的客户端应用程序(例如,添加到服务命名空间中)后,我得到了相同的实体对象,但在 服务命名空间 中。当然,然后我想通过 Data Service 获取任何 Company 对象(例如),它会从命名空间 Services 返回一组实体对象。

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

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

【问题讨论】:

    标签: wcf entity-framework-4.1 wcf-data-services ef4-code-only


    【解决方案1】:

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

    你必须这样做:

    context.CreateQuery(entitysetName).

    T 是您跨服务和客户端使用的常用类型。

    请记住,如果实体中的键不遵循约定,您可能必须在类型上添加 DataServiceKeyAttribute 或 DataServiceEntityAttribute。

    希望这会有所帮助。

    谢谢 普拉提克

    【讨论】:

    • 普拉蒂克,非常感谢!我使用您的解决方案解决了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多