Прокси-объекты службы данных WCF и Entity Framework

У меня вопрос относительно WCF DataService и Entity Framework 4.1 (сначала код). Итак, у меня есть 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 (таких как Компания, Адрес, Человек и т. Д.). После добавления этой службы в мое клиентское приложение (например, в пространство имен Services) я получил те же объекты сущности, но в Службах пространство имен. И, конечно, затем я хочу получить любой объект компании (например) через службу данных, он возвращает мне набор объектов сущности из пространства имен Службы.

Итак, мой вопрос: как я могу сказать службе данных использовать мои реальные объекты сущностей и не создавать эти другие прокси-объекты в моем проекте? Если это невозможно, то как я могу скопировать объекты, которые я получаю из службы данных, в мои реальные объекты?

Моя цель - получить некоторые объекты сущностей с сервера через службу данных с использованием контекста данных, а затем использовать их на стороне клиента. Я хочу использовать одну сборку для всех объектов сущностей как на локальной, так и на серверной стороне.


person DolceVita    schedule 07.06.2011    source источник


Ответы (1)


Если вы хотите использовать одни и те же объекты, вам не нужно добавлять службу в клиентское приложение. Просто добавьте сборку, содержащую типы, в сборку, на которую указывает ссылка, и в клиентском приложении создайте DataServiceContext с URI службы.

Вам нужно будет сделать что-то вроде этого:

context.CreateQuery (entitysetName).

T - это общий тип, который вы используете для службы и клиента.

Следует иметь в виду, что если ключи в сущности не соответствуют соглашению, вам, возможно, придется добавить атрибут DataServiceKeyAttribute или DataServiceEntityAttribute к типу.

Надеюсь это поможет.

Спасибо Pratik

person Pratik    schedule 07.06.2011
comment
Pratik, спасибо большое! Решил проблему вашим решением. - person DolceVita; 07.06.2011