Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC4 Web Api未返回实体框架IEnumerable()_Asp.net Mvc_Vb.net_Entity Framework_Asp.net Web Api - Fatal编程技术网

Asp.net mvc MVC4 Web Api未返回实体框架IEnumerable()

Asp.net mvc MVC4 Web Api未返回实体框架IEnumerable(),asp.net-mvc,vb.net,entity-framework,asp.net-web-api,Asp.net Mvc,Vb.net,Entity Framework,Asp.net Web Api,我有一个简单的表,如下所示,用实体框架映射。我试图只返回IEnumerable(MyTableObject)的一个非常基本的调用,但是MVCAPI刚刚爆炸,错误代码为500。当我尝试返回一个IEnumerable(字符串)并只选择一个列时,它也会这样做 我尝试用以下代码返回这个模型 ' GET api/chatlog Public Function GetValues() As IEnumerable(Of ChatLog) Using mcEntity As New McEntiti

我有一个简单的表,如下所示,用实体框架映射。我试图只返回IEnumerable(MyTableObject)的一个非常基本的调用,但是MVCAPI刚刚爆炸,错误代码为500。当我尝试返回一个IEnumerable(字符串)并只选择一个列时,它也会这样做

我尝试用以下代码返回这个模型

' GET api/chatlog
Public Function GetValues() As IEnumerable(Of ChatLog)
    Using mcEntity As New McEntities

        Return mcEntity.ChatLogs.ToList()
    End Using
End Function
对于我来说,返回数据很不幸。我什么也得不到

MVCWebAPI是否不支持将对象从EF传递到管道中,或者我必须手动将其序列化为XML

Fiddler抛出“HTTP/1.1500内部服务器错误”

两件事

  • 您可以通过执行以下操作在错误消息中启用异常详细信息:

    Configuration.IncludeErrorDetailPolicy=IncludeErrorDetailPolicy.Always

    并共享异常消息和堆栈跟踪

  • 关于using语句,通常建议在控制器中而不是在操作中处理EFContext。ApicController是一个IDisposable。您应该重写控制器的Dispose方法,并在那里处置DBContext。 例如

    public CustomersContext _db = new CustomersContext();
    
    public IEnumerable<Customer> Get ()
    {
        return _db.Customers;
    }
    
    protected override Dispose(bool disposing)
    {
        base.Dispose(disposing);
    
        if(disposing)
        {
            _db.Dispose();
        }
    }
    
    public CustomersContext\u db=new CustomersContext();
    公共IEnumerable Get()
    {
    返回客户;
    }
    受保护的覆盖处理(布尔处理)
    {
    基地。处置(处置);
    如果(处置)
    {
    _db.Dispose();
    }
    }
    

  • 你试过返回一个数组吗?我刚注意到你正在调用ToList,但仍然返回IEnumerable,尝试更改我在几个测试中使用的返回类型,并同时使用ToArray()和AsEnumerable(),也许最好将其添加到上面。它抛出一个不同的异常。“ObjectContext实例已被释放,无法再用于需要连接的操作。”因此,删除using语句无效。另外,更改返回类型ToList(ChatLog)也会抛出相同的错误。Fiddler也没有表现出太多:-(objectcontext错误听起来像是一个范围问题。当我在castle Windsor过着错误的生活方式时,我已经看到了这一点。也许你应该进一步探讨这一点。可能值得再问一个关于objectcontext问题的问题。当数据在“Using”中时,我检查了代码语句。在控制器返回数据之前,连接似乎已关闭。我在另一台机器上从头开始重新构建了同一个项目,并且正常工作,这使我相信这是配置问题。