Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 OperationContract с EntityFramework  [new]
cha0ss
Member

Откуда: г. Димитровград, ООО "АИС Город"
Сообщений: 142
Здравствуйте, подскажите пожалуйста, что делаю не так:

На сервере:
1. Создал Edmx модель из БД.
2. Создал WCF Service и определил там следующий OperationContract:
 
public class TestService : ITestService
    {
public List<People> f2()
        {
            TestEntities context = new TestEntities();

            var q = from c in context.PeopleSet
                select c;
            return q.ToList();
        }
}

и в интерфейсе:

 
[ServiceContract]
public interface ITestService
{
     [OperationContract]
     List<People> f2();
}

На клиенте:
1. Создаю ServiceReference1. Создается, за исключением того, что в сгенеренном классе нету объекта ServiceReference1Client.
Если в контрактах не работаю с edmx-моделью, тогда все замечательно работает.

Скачал тестовый проект с МСДН, вроде все также, но в МСДН-овском проекте работает, в моем - нет.
30 авг 10, 16:52    [9351141]     Ответить | Цитировать Сообщить модератору
 Re: OperationContract с EntityFramework  [new]
bured
Member

Откуда:
Сообщений: 24291
People как DataContract объявлен? (на сервере и клиенте)
30 авг 10, 16:58    [9351182]     Ответить | Цитировать Сообщить модератору
 Re: OperationContract с EntityFramework  [new]
cha0ss
Member

Откуда: г. Димитровград, ООО "АИС Город"
Сообщений: 142
bured,

People - это класс, сгенеренный EntityFramework, он по умолчанию уже идет как DataContract.
Из кода:
[global::System.Runtime.Serialization.DataContractAttribute(IsReference=true)]
[global::System.Serializable()]
30 авг 10, 17:27    [9351447]     Ответить | Цитировать Сообщить модератору
 Re: OperationContract с EntityFramework  [new]
bured
Member

Откуда:
Сообщений: 24291
cha0ss,

на клиенте такой же контекст?
30 авг 10, 17:28    [9351464]     Ответить | Цитировать Сообщить модератору
 Re: OperationContract с EntityFramework  [new]
cha0ss
Member

Откуда: г. Димитровград, ООО "АИС Город"
Сообщений: 142
bured,

До того, как я подключаю ServiceReference я ничего не объявляю. После того, как подключил ServiceReference в сгенеренных классах появляется только один класс People. В аттрибутах DataContract есть
30 авг 10, 17:40    [9351570]     Ответить | Цитировать Сообщить модератору
 Re: OperationContract с EntityFramework  [new]
bured
Member

Откуда:
Сообщений: 24291
cha0ss
bured,

До того, как я подключаю ServiceReference я ничего не объявляю. После того, как подключил ServiceReference в сгенеренных классах появляется только один класс People. В аттрибутах DataContract есть

Это не пойдёт, если у People внешние ключи. Создавайте нормальный контекст или объявляйте все связанные с People сущности.
30 авг 10, 17:45    [9351626]     Ответить | Цитировать Сообщить модератору
 Re: OperationContract с EntityFramework  [new]
bured
Member

Откуда:
Сообщений: 24291
на клиенте
30 авг 10, 17:46    [9351627]     Ответить | Цитировать Сообщить модератору
 Re: OperationContract с EntityFramework  [new]
cha0ss
Member

Откуда: г. Димитровград, ООО "АИС Город"
Сообщений: 142
Почему тогда в МСДН-вском примере все работает без всяких объяв классов на клиенте.

Сцылка на исходники: http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/DataPoints2008_07.exe

Я ставил стартовый проект NWServiceLibrary. запускал. И даже с чистого проекта при создании ServiceReference (http://localhost:8731/Design_Time_Addresses/NWServiceLibrary/NWService/) все нормально создается.
В статье также ничего не говорится о создании контекста на клиенте (http://msdn.microsoft.com/ru-ru/magazine/cc700340.aspx)
30 авг 10, 17:57    [9351740]     Ответить | Цитировать Сообщить модератору
 Re: OperationContract с EntityFramework  [new]
bured
Member

Откуда:
Сообщений: 24291
Да, в примере в Reference.cs объявлено всё что надо.

Есть у People внешние ключи?
30 авг 10, 18:11    [9351846]     Ответить | Цитировать Сообщить модератору
 Re: OperationContract с EntityFramework  [new]
cha0ss
Member

Откуда: г. Димитровград, ООО "АИС Город"
Сообщений: 142
bured
Да, в примере в Reference.cs объявлено всё что надо.

Есть у People внешние ключи?

Reference.cs генерится автоматически когда мы устанавливаем Service Reference. До этого ничего не прописывается.
31 авг 10, 13:28    [9355750]     Ответить | Цитировать Сообщить модератору
 Re: OperationContract с EntityFramework  [new]
cha0ss
Member

Откуда: г. Димитровград, ООО "АИС Город"
Сообщений: 142
bured
Да, в примере в Reference.cs объявлено всё что надо.

Есть у People внешние ключи?

Reference.cs генерится автоматически когда мы устанавливаем Service Reference. До этого ничего не прописывается.

Я же пишу, что беру этот МСДН-ский проект, запускаю службу.
Далее открываю чистый проект (не пишу там не единой строчки кода), сразу подключаю Service Reference и все генерится нормально, более того я к этому МСДН-вскому проекту добавил и своих People, и так же в пустом проекте генерится все нормально.
Что не так в моей службе никак понять не могу :(

P.S У таблицы Doc есть внешний ключ на таблицу People.
31 авг 10, 13:31    [9355781]     Ответить | Цитировать Сообщить модератору
 Re: OperationContract с EntityFramework  [new]
cha0ss
Member

Откуда: г. Димитровград, ООО "АИС Город"
Сообщений: 142
Вообщем нашел изза чего не работает:
Если создавать Edmx модель находится в том же проекте, что и запускаемый сервис, тогда все отлично. Если же Edmx модель находится в другой dll, то возникает проблема.
Это все изза того, что при использовании Edmx модели из dll в connectionstring надо менять путь до метаданных, т.е
metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl уже не катит.

Кто знает что надо прописать, чтобы указать метаданные из dll?
31 авг 10, 14:25    [9356349]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить