异常消息是在数据上下文类型上有一个*** IQueryable 属性,其元素类型不是实体类型
Posted
技术标签:
【中文标题】异常消息是在数据上下文类型上有一个*** IQueryable 属性,其元素类型不是实体类型【英文标题】:Exception message is On data context type there is a top IQueryable property whose element type is not an entity type 【发布时间】:2015-01-07 23:55:18 【问题描述】:我正在构建一个托管在 IIS 7 中的 WCFDataService,我将使用反射提供程序作为数据源提供程序。 如果我将实体类型定义保留在我定义服务的同一个程序集中,我的项目就可以工作,但如果我将实体类型移动到另一个引用的程序集,则不会工作;
我收到以下错误:
“服务器在处理请求时遇到错误。异常消息是'在数据上下文类型'EntityContainer'上,有一个元素类型不是实体类型的***IQueryable属性'Cats'”
服务
public class WcfDataService1 : DataService<EntityContainer>
public static void InitializeService(DataServiceConfiguration config)
config.SetEntitySetAccessRule("Cats", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
实体容器
public class EntityContainer
public IQueryable<Cat> Cats
get
var s = new List<Cat>();
var c1 = new Cat Id = 1, Name = "Fufi";
var c2 = new Cat Id = 1, Name = "Felix";
s.Add(c1);
s.Add(c2);
return s.AsQueryable();
实体类型
[DataServiceKey("Id")]
public class Cat
public int Id get; set;
public string Name get; set;
正如我上面所说,将 Cat 类与其他代码保持在一起的所有工作,但将 Cat 类移动到引用的程序集时出现错误
我错过了什么?
【问题讨论】:
【参考方案1】:经过 2 小时和强烈的头痛,我自己发现了问题,我在我的服务中引用了 Microsoft.Data.Services.Client 和 System.Data.Services .Client 在我要移动实体类型的引用项目库中。希望我的帖子可以帮助到其他人。
【讨论】:
另外一个用于分享解决方案,虽然很头疼:) +100 已经头疼了,没有解决办法——这个救了我!【参考方案2】:此外,经过一天的强烈头痛,我找到了EntityFramework模型6.0.4的解决方案。它需要 Microsoft.OData.EntityFrameworkProvider 程序集和 WcfDataService 类从 EntityFrameworkDataService 派生如下:
public class WcfDataService1 : EntityFrameworkDataService<EntityContainer>
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
// TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
【讨论】:
以上是关于异常消息是在数据上下文类型上有一个*** IQueryable 属性,其元素类型不是实体类型的主要内容,如果未能解决你的问题,请参考以下文章