Хочу использовать связку WinForms + WCF Data Services + SQL Server
В отдельном проекте (Model) создал модель edmx сущностей базы данных.
В отдельном проекте (Services) создал сервис WCF Data Service.
В отдельном проекте (Application) создал WinForms приложение, добавил референс на проект с edmx сущностями.
Проблема: при попытке добавить референс на сервис от запущенного второго проекта Visual Studio дублирует сущности, то есть для каждой сущности, определенной в проекте Model создает идентичную в проекте Application, например: Model.ModelEntities.Employee и Application.ServiceReference.Enployee.
Флаг "reuse types in referenced assemblies" выставлен.
Подскажите, как побороть такое поведение, чтобы можно было использовать одну и ту же модель данных как на сервере, так и на клиенте.
Здравствуйте, Аноним, Вы писали:
А>Хочу использовать связку WinForms + WCF Data Services + SQL Server
А>В отдельном проекте (Model) создал модель edmx сущностей базы данных.
А>В отдельном проекте (Services) создал сервис WCF Data Service.
А>В отдельном проекте (Application) создал WinForms приложение, добавил референс на проект с edmx сущностями.
А>Проблема: при попытке добавить референс на сервис от запущенного второго проекта Visual Studio дублирует сущности, то есть для каждой сущности, определенной в проекте Model создает идентичную в проекте Application, например: Model.ModelEntities.Employee и Application.ServiceReference.Enployee.
А>Флаг "reuse types in referenced assemblies" выставлен.
А>Подскажите, как побороть такое поведение, чтобы можно было использовать одну и ту же модель данных как на сервере, так и на клиенте.
Когда создается референс на WCF то все используемые WCF классы должны быть продублированы. Это делается для того, чтобы можно было разрабатывать клиент даже без исходников WCF. Связь делается с работающей WCF службой и при изменении классов в WCF надо делать Update ServiceReference, чтобы классы синхроонизировалися.
Re[2]: Entity Framework 4 with WCF Data Services 4
Здравствуйте, Vaako, Вы писали:
V>Когда создается референс на WCF то все используемые WCF классы должны быть продублированы. Это делается для того, чтобы можно было разрабатывать клиент даже без исходников WCF. Связь делается с работающей WCF службой и при изменении классов в WCF надо делать Update ServiceReference, чтобы классы синхроонизировалися.
Классы не дублируются полностью, копируются только поля с атрибутом [DataMember] вроде бы.
Здравствуйте, Аноним, Вы писали:
А>...
А>Подскажите, как побороть такое поведение, чтобы можно было использовать одну и ту же модель данных как на сервере, так и на клиенте.
Здравствуйте, Аноним, Вы писали:
А>Хочу использовать связку WinForms + WCF Data Services + SQL Server А>В отдельном проекте (Model) создал модель edmx сущностей базы данных. А>В отдельном проекте (Services) создал сервис WCF Data Service. А>В отдельном проекте (Application) создал WinForms приложение, добавил референс на проект с edmx сущностями.
А>Подскажите, как побороть такое поведение, чтобы можно было использовать одну и ту же модель данных как на сервере, так и на клиенте.
Сделайте интерфейсы от которых будут наследоваться классы как клиенте так и на сервере. Кроме того, что у вас есть сущности с совпадающими названиями свойств — ничего общего между ними нет. Более того, иметь на клиенте сборку с EF контекстом не самая лучшая идея.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Entity Framework 4 with WCF Data Services 4
От:
Аноним
Дата:
27.01.12 06:59
Оценка:
Здравствуйте, TK, Вы писали:
TK>Кроме того, что у вас есть сущности с совпадающими названиями свойств — ничего общего между ними нет. Более того, иметь на клиенте сборку с EF контекстом не самая лучшая идея.
Очень странно. Я всегда предполагал, что модель данных должна быть единая для клиента и сервера, при этом на клиенте просто меняется контекст (с доступа к базе данных на доступ к сервису). Иначе получится, что модель данных зависит от метода доступа к данным.
When a service reference is added to a project, any types defined in the service are generated in the local project. In many cases, this creates duplicate types when a service uses common .NET Framework types or when types are defined in a shared library.
To avoid this problem, types in referenced assemblies are shared by default.
То есть по-сути, решением в моей ситуации является добавить референс на сборку, в которой находится модель данных и выставить флаг "reuse types in referenced assemblies", но оно не работает.
Пока не хочется искать обходное решение, хочется разобраться, почему не работает стандартное решение.