Объекты WCF Data Service и 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 (например, Company, Address, Person и т. Д.). После добавления этой службы в мое клиентское приложение (например, в пространство имен Services) я получил те же объекты Entity, но в пространстве имен Services. И, конечно, тогда я хочу получить любой объект Компании (например) через Службу данных, он возвращает мне набор объектов сущности из Службы пространства имен.

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

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

1 ответ

Решение

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

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

context.CreateQuery (entitysetName).

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

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

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

Спасибо пратик

Другие вопросы по тегам