Объекты WCF Data Service и Entity Framework - PullRequest
0 голосов
/ 07 июня 2011

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

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

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

1 Ответ

3 голосов
/ 07 июня 2011

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

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

context.CreateQuery(entitysetName).

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

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

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

Спасибо Pratik

...