powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Entity Framework в WCF сервисе
5 сообщений из 5, страница 1 из 1
Entity Framework в WCF сервисе
    #37329514
Balda_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть silverlight приложение, которое получает доступ к данным базы через WCF-сервис.
Для доступа к данным в WCF-сервисе используется Entity Framework.
Код службы (возвращает список работников):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class EmployeesService
    {
        [OperationContract]
        public IQueryable<PersonalInfo> GetData()
        {
            var test = new EmployeesEntities();
            return test.PersonalInfoes;
        }
    }

Вызов службы на клиенте:
Код: plaintext
1.
2.
3.
var proxy = new EmployeesServiceClient();
proxy.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(proxy_GetDataCompleted);
proxy.GetDataAsync(1);
При выполнении метода GetData вылетает сообщение об ошибке: "The remote server returned an error: NotFound."
Трассировка WCF-сервиса расшифровала эту ошибку так:
"Type 'System.Data.Objects.ObjectSet`1[TestEmployeesService.Models.PersonalInfo]' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. If the type is a collection, consider marking it with the CollectionDataContractAttribute. See the Microsoft .NET Framework documentation for other supported types."
Но в классе метаданных, к-й был сгенерирован при создании модели все атрибуты и так проставлены:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
    [EdmEntityTypeAttribute(NamespaceName="EmployeesModel", Name="PersonalInfo")]
    [Serializable()]
    [DataContractAttribute(IsReference=true)]
    public partial class PersonalInfo : EntityObject
    {
        #region Factory Method
    
        /// <summary>
        /// Create a new PersonalInfo object.
        /// </summary>
        /// <param name="employeeID">Initial value of the EmployeeID property.</param>
        /// <param name="firstName">Initial value of the FirstName property.</param>
        /// <param name="lastName">Initial value of the LastName property.</param>
        /// <param name="birthDate">Initial value of the BirthDate property.</param>
        /// <param name="familyStatus">Initial value of the FamilyStatus property.</param>
        /// <param name="position">Initial value of the Position property.</param>
        public static PersonalInfo CreatePersonalInfo(global::System.Int32 employeeID, global::System.String firstName, global::System.String lastName, global::System.DateTime birthDate, global::System.Int32 familyStatus, global::System.Int32 position)
        {
            PersonalInfo personalInfo = new PersonalInfo();
            personalInfo.EmployeeID = employeeID;
            personalInfo.FirstName = firstName;
            personalInfo.LastName = lastName;
            personalInfo.BirthDate = birthDate;
            personalInfo.FamilyStatus = familyStatus;
            personalInfo.Position = position;
            return personalInfo;
        }

        #endregion
        #region Primitive Properties
    
        /// <summary>
        /// No Metadata Documentation available.
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.Int32 EmployeeID
        {
            get
            {
                return _EmployeeID;
            }
            set
            {
                if (_EmployeeID != value)
                {
                    OnEmployeeIDChanging(value);
                    ReportPropertyChanging("EmployeeID");
                    _EmployeeID = StructuralObject.SetValidValue(value);
                    ReportPropertyChanged("EmployeeID");
                    OnEmployeeIDChanged();
                }
            }
        }
        private global::System.Int32 _EmployeeID;
        partial void OnEmployeeIDChanging(global::System.Int32 value);
        partial void OnEmployeeIDChanged();
    
        /// <summary>
        /// No Metadata Documentation available.
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.String FirstName
        {
            get
            {
                return _FirstName;
            }
            set
            {
                OnFirstNameChanging(value);
                ReportPropertyChanging("FirstName");
                _FirstName = StructuralObject.SetValidValue(value, false);
                ReportPropertyChanged("FirstName");
                OnFirstNameChanged();
            }
        }
        private global::System.String _FirstName;
        partial void OnFirstNameChanging(global::System.String value);
        partial void OnFirstNameChanged();
    
        /// <summary>
        /// No Metadata Documentation available.
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.String LastName
        {
            get
            {
                return _LastName;
            }
            set
            {
                OnLastNameChanging(value);
                ReportPropertyChanging("LastName");
                _LastName = StructuralObject.SetValidValue(value, false);
                ReportPropertyChanged("LastName");
                OnLastNameChanged();
            }
        }
        private global::System.String _LastName;
        partial void OnLastNameChanging(global::System.String value);
        partial void OnLastNameChanged();
    
        /// <summary>
        /// No Metadata Documentation available.
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.DateTime BirthDate
        {
            get
            {
                return _BirthDate;
            }
            set
            {
                OnBirthDateChanging(value);
                ReportPropertyChanging("BirthDate");
                _BirthDate = StructuralObject.SetValidValue(value);
                ReportPropertyChanged("BirthDate");
                OnBirthDateChanged();
            }
        }
        private global::System.DateTime _BirthDate;
        partial void OnBirthDateChanging(global::System.DateTime value);
        partial void OnBirthDateChanged();

/// <summary>
        /// No Metadata Documentation available.
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.Int32 FamilyStatus
        {
            get
            {
                return _FamilyStatus;
            }
            set
            {
                OnFamilyStatusChanging(value);
                ReportPropertyChanging("FamilyStatus");
                _FamilyStatus = StructuralObject.SetValidValue(value);
                ReportPropertyChanged("FamilyStatus");
                OnFamilyStatusChanged();
            }
        }
        private global::System.Int32 _FamilyStatus;
        partial void OnFamilyStatusChanging(global::System.Int32 value);
        partial void OnFamilyStatusChanged();
    
        /// <summary>
        /// No Metadata Documentation available.
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.Int32 Position
        {
            get
            {
                return _Position;
            }
            set
            {
                OnPositionChanging(value);
                ReportPropertyChanging("Position");
                _Position = StructuralObject.SetValidValue(value);
                ReportPropertyChanged("Position");
                OnPositionChanged();
            }
        }
        private global::System.Int32 _Position;
        partial void OnPositionChanging(global::System.Int32 value);
        partial void OnPositionChanged();

 #region Navigation Properties
    
        /// <summary>
        /// No Metadata Documentation available.
        /// </summary>
        [XmlIgnoreAttribute()]
        [SoapIgnoreAttribute()]
        [DataMemberAttribute()]
        [EdmRelationshipNavigationPropertyAttribute("EmployeesModel", "FK_PersonalInfo_FamilyStatus", "FamilyStatus")]
        public FamilyStatu FamilyStatu
        {
            get
            {
                return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<FamilyStatu>("EmployeesModel.FK_PersonalInfo_FamilyStatus", "FamilyStatus").Value;
            }
            set
            {
                ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<FamilyStatu>("EmployeesModel.FK_PersonalInfo_FamilyStatus", "FamilyStatus").Value = value;
            }
        }
        /// <summary>
        /// No Metadata Documentation available.
        /// </summary>
        [BrowsableAttribute(false)]
        [DataMemberAttribute()]
        public EntityReference<FamilyStatu> FamilyStatuReference
        {
            get
            {
                return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<FamilyStatu>("EmployeesModel.FK_PersonalInfo_FamilyStatus", "FamilyStatus");
            }
            set
            {
                if ((value != null))
                {
                    ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedReference<FamilyStatu>("EmployeesModel.FK_PersonalInfo_FamilyStatus", "FamilyStatus", value);
                }
            }
        }
    
        /// <summary>
        /// No Metadata Documentation available.
        /// </summary>
        [XmlIgnoreAttribute()]
        [SoapIgnoreAttribute()]
        [DataMemberAttribute()]
        [EdmRelationshipNavigationPropertyAttribute("EmployeesModel", "FK_PersonalInfo_Position", "Position")]
        public Position Position1
        {
            get
            {
                return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<Position>("EmployeesModel.FK_PersonalInfo_Position", "Position").Value;
            }
            set
            {
                ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<Position>("EmployeesModel.FK_PersonalInfo_Position", "Position").Value = value;
            }
        }
        /// <summary>
        /// No Metadata Documentation available.
        /// </summary>
        [BrowsableAttribute(false)]
        [DataMemberAttribute()]
        public EntityReference<Position> Position1Reference
        {
            get
            {
                return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<Position>("EmployeesModel.FK_PersonalInfo_Position", "Position");
            }
            set
            {
                if ((value != null))
                {
                    ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedReference<Position>("EmployeesModel.FK_PersonalInfo_Position", "Position", value);
                }
            }
        }

        #endregion
    }

В чем моя ошибка?
...
Рейтинг: 0 / 0
Entity Framework в WCF сервисе
    #37330372
Balda_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После изменения метода получения данных на этот:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
[OperationContract]
        public List<PersonalInfo> GetAllEmployees()
        {
            var context = new EmployeesEntities();
            var q = from p in context.PersonalInfoes select p;
            return q.ToList<PersonalInfo>();
        }
заработало. Теперь данные передаются правильно.

Но возник вопрос насчет привязки полученных данных к DataForm. Если CurrentItem присвоить значение элемента из полученного списка, то на форме отображаются абсолютно все поля.
Как задать порядок отображения полей, скрыть ненужные поля, задать валидацию... Атрибуты из System.ComponentModel.DataAnnotations не действуют.
...
Рейтинг: 0 / 0
Entity Framework в WCF сервисе
    #37331613
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите это пошаговое руководство.
http://msdn.microsoft.com/ru-ru/library/ff713719%28v=vs.91%29.aspx

там есть и про валидацию, и про то, как указать на датаформ только нужные поля.
...
Рейтинг: 0 / 0
Entity Framework в WCF сервисе
    #37332806
Balda_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11,
В этом руководстве используются domainService, в метаданных проставлены атрибуты System.ComponentModel.DataAnnotations, а как источник данных используется domainDataSource.
Я же передаю данные из WCF сервиса (без использования domainService) и полученные данные напрямую привязываю к DataGrid, DataForm и т.д. В моем случае прописывание атрибутов Display, RegularExpression и т.п. в классе, сгенерированном при создании модели просто не действуют ((
...
Рейтинг: 0 / 0
Entity Framework в WCF сервисе
    #37362695
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Основное отличие WCF RIA services от WCF services как раз и состоит в том, что RIA services ко всему прочему "могут" передавать на клиента в QueryResult некоторые метаданные. Поэтому DataAnnotation в RIA сервисах работает, в просто WCF - нет. Правильным будет создать прокси представление класса (POCO) и пометить его аттрибутами WCF для сериализации.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Entity Framework в WCF сервисе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]