异常消息是在数据上下文类型上有一个*** 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 属性,其元素类型不是实体类型的主要内容,如果未能解决你的问题,请参考以下文章

如何从它的消息中分离异常类型

一个诡异的 Pulsar InterruptedException 异常

使用IDA查看汇编代码上下文去辅助排查C++软件异常问题

我执行amfphp文件时出错

向 Cocoa 应用程序的主事件循环发布消息?

绑定属性消息在此上下文中不支持值 mtom