WCF DataService с Entity Framework: поддержка TimeSpan - PullRequest
3 голосов
/ 26 февраля 2012

Я пытаюсь создать службу данных WCF поверх контекста объекта Entity Framework, который предоставляет ряд свойств System.TimeSpan. Однако, когда я пытаюсь получить доступ к сервису, я получаю следующую ошибку: «Свойство« ScheduledDepartureTime »типа« DepotRoute »имеет тип« Time », который не поддерживается типом примитива. '

Я пытался использовать DataServiceConfiguration.RegisterKnownType (typeof (TimeSpan)), а также DataServiceConfiguration.EnableTypeAccess (typeof (TimeSpan) .FullName), но ни один из них, кажется, не имеет никакого значения - я все еще получаю ошибку ...

public static void InitializeService(DataServiceConfiguration config) {

    config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
    config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
    config.UseVerboseErrors = true;

    config.RegisterKnownType(typeof(TimeSpan));
    config.EnableTypeAccess(typeof(TimeSpan).FullName);

    RouteTable.Routes.Add(new ServiceRoute("Data", new DataServiceHostFactory(), typeof(Data)));

}

Хотя мой контекст генерируется как DbContext, я переопределил CreateDataSource для предоставления ObjectContext, а не для создания службы как DataService ...

protected override ObjectContext CreateDataSource() {

    var context = new MercuryContext().ObjectContext;
    context.ContextOptions.ProxyCreationEnabled = false;

    return context;

}

Однако я также пытался показать сервис, основанный на стандартной модели EF, но это тоже не имеет значения. Я даже пробовал использовать VS11 Develop Preview - это тоже не может раскрыть мои свойства.

Чего мне не хватает? Должен быть какой-то способ сделать это.

1 Ответ

0 голосов
/ 26 февраля 2012

EF не может использовать тип TimeSpan в запросе; вам нужно будет преобразовать TimeSpan в соответствующее значение DateTime, которое оно представляет.

...