Объекты 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 для типа.
Надеюсь это поможет.
Спасибо пратик