我正在尝试在实体框架对象上下文中创建一个WCF数据服务,该上下文公开了许多System.TimeSpan属性。但是,当我尝试访问该服务时,我收到以下错误:'属性' ScheduledDepartureTime'在类型' DepotRoute'属于'时间'这不是受支持的原始类型。'
我尝试过使用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 - 这也不能暴露我的属性。
我错过了什么?必须有一些方法来做到这一点。
答案 0 :(得分:0)
EF不能在查询中使用TimeSpan类型;您需要将TimeSpan转换为它所代表的相应DateTime值。