Web API 和 EF 导致 InvalidOperationException

2023-12-24

我的解决方案中有 3 个项目:DataModel (EF)、DAL,它与 DataModel 和 MVC Web API 中的实体一起使用。

只有 2 个非常简单的实体:Person、Address,每个实体都有 3 个简单字段,Person 具有 Address 字段(因此这 2 个实体是链接的)

在我的 DAL 中,我有一个方法可以返回所有 Person 的列表,内容非常简单: return context.Person.ToList();

现在,在我的 Web API 中,我只是调用 GetPersons() 方法并尝试返回它。 在这里我收到一条奇怪的错误消息:

“发生错误。”,“ExceptionMessage”:“'ObjectContent`1' 类型无法序列化内容类型的响应正文 '应用程序/json; charset=utf-8'.","ExceptionType":"System.InvalidOperationException","StackTrace":null,"InnerException":{"$id":"2","Message":"An 发生错误。",...

当我调试时,我可以看到我确实拥有来自 GetPersons 方法的数据。 我还用谷歌搜索并找到了唯一的解决方案:我应该将以下几行添加到我的启动配置中:

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);

但这没有帮助。

我还尝试在不使用数据库的情况下手动填充列表:在这种情况下它有效。

我有一个强烈的印象,它与 EF 有关,但我不知道到底是什么。


  • 分步指南...

Step 1:转到您的实体项目,然后找到继承自 DbContext 类的类的名称。

例如:如果类名为 MyProjectEntities,如下所示:

public partial class MyProjectEntities : DbContext
{
   //Auto Generated statements if EF is used.
}

Step 2:转到您的 WebApi 项目,找到从 ApiController 继承的控制器,然后在该控制器中创建 MyProjectEntities 类的实例。

例如:如果 Api 控制器名称为 PersonController,则为 MyProjectEntities 创建实例,如下所示:

public class PersonController : ApiController
{
   MyProjectEntities DB = new MyProjectEntities();
}

Step 3:为 PersonController 类创建构造函数并将 ProxyCreationEnabled 属性设置为 false,如下所示:

public PersonController()
{
   DB.Configuration.ProxyCreationEnabled = false;
}

Web API 控制器中的最终代码类似于以下内容:

public class PersonController : ApiController
{
   MyProjectEntities DB = new MyProjectEntities();
   public PersonController()
   {
      DB.Configuration.ProxyCreationEnabled = false;
   }
...
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web API 和 EF 导致 InvalidOperationException 的相关文章

  • WebApi 2 使用属性路由构建嵌套路由。结果同时映射到两个控制器

    我有两个控制器 一个名为 Products 另一个名为 ProductsGroup RoutePrefix api clientUrl products public class ProductsController BaseApiCont
  • 如何在Entity Framework 5中正确触发集合的延迟加载?

    我在我的应用程序中使用 EF5 代码优先 我有一个包含一些延迟加载字段的表 public class TestEntity public int Id get set public virtual TestEntity2 SubEntity
  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • SQL Server中主键和唯一索引的区别[重复]

    这个问题在这里已经有答案了 我的公司目前正在重写我们最近获得的一个应用程序 我们选择使用 ASP net mvc4 来构建这个系统 并使用实体框架作为我们的 ORM 我们收购的公司的前任所有者非常坚定地要求我们使用他们的旧数据库 并且不对其
  • 实体框架:数据库上下文可以在不同模式之间拥有外键吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们有一个具有多个模式的数据库 公司架构师希望每个架构都有实体框架 DbContext 此外 不同模式之间还存在外键关系 今天在搭建架
  • 如何使用 Azure DevOps REST API 创建新的构建管道?

    我正在尝试以编程方式创建新的构建管道 我正在寻找用于此操作的 Azure DevOps REST API 我没有获得使用 REST API 创建管道的正确示例 请指教 如何使用 Azure DevOps REST API 创建新的构建管道
  • 数据库优先方法和修改数据库模式

    我正在使用数据库优先方法使用实体框架 DbContext 构建 ASP NET MVC Web 应用程序 如果在某些情况下我需要修改数据库 例如添加新表或修改现有表 添加列或更改列数据类型 我应该 删除现有实体 edmx 和 tt 文件夹并
  • 同一数据库的多个实体框架

    我们可以在项目中为同一个数据库创建多个实体框架吗 我想为每个子系统创建实体框架 一些子系统具有共享表 这是可能的 您可以根据需要创建多个 EDMX 文件 但不建议这样做 因为 您不能查询不同模型中的多个表 定义边界将非常困难 因为大多数表都
  • 在 PHP 中使用 file_get_contents 进行 PUT 请求的错误请求

    这个 api 调用使用 Postman REST 客户端 可以正常工作 但是当我的 GAE 应用程序中的服务器上发出请求时 我当前收到以下错误 HTTP 请求失败 在 C Projects app file php 第 26 行 打开流失败
  • MVC4 - ContextDependentView - 是什么意思?

    我刚刚开始使用 MVC4 我看到的第一个操作方法有一些新内容 我查了一下互联网 找不到任何关于此的信息 public ActionResult LogOn return ContextDependentView 有谁知道 ContextDe
  • 从数据库配置中的连接字符串中删除 SSIS 密码

    我有一个 SSIS 包 它使用 SQL 服务器中的 SSIS 配置表来检索 OLE DB 连接管理器的连接字符串属性 问题是我还需要相同的连接字符串来调用使用实体框架的程序集 我尝试访问连接管理器连接字符串属性 但 SSIS 总是删除密码
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • OnModelCreating 从未被调用

    我开始使用实体框架 问题是我的 OnModelCreating 方法从未被调用 这是我的上下文类 public class TestContext DbContext public TestContext base name TestDBC
  • 不同 servlet-api 版本冲突

    我正在使用 Maven 和 Jetty 作为服务器来开发 RestEasy Web 服务 其中一项服务应使用扩展 javax servlet http HttpServletResponseWrapper 的 Filter 问题出在来自 s
  • MVC4 输入字段占位符

    Does MVC4默认支持placeholders对于生成的输入字段 我没有找到任何东西 所以我正在尝试实现我自己的 但不幸的是Prompt E Mail 没有传递到ViewData ModelMetadata Watermark同时产生控
  • 如何访问Web api控制器中的mvc控制器以从视图中获取pdf

    我为单页 Web 应用程序创建了 Web Api 和 MVC 组合 我想调用 Web api 并渲染 mvc 控制器以使用 Rotativa api 从视图创建 pdf 问题是当我在 Web api 中访问 mvc 控制器时它不起作用 我如
  • 如何使用 LINQ 获取唯一 id 列的最大值

    如何使用 LINQ 以最简单的方式编写此代码 SELECT MAX Game id AS MaxValue FROM Dim Game Try context Dim Games Max g gt g Game id
  • 如何在种子实体框架版本 6.x 中通过 AddOrUpdate 方法插入身份[重复]

    这个问题在这里已经有答案了 我有一个具有身份列的实体 作为数据种子的一部分 我想对系统中的 标准数据 使用特定的标识符值 我不想禁用身份 只有我想在迁移种子中设置 IDENTITY INSERT ON 我的代码是 protected ove
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器

随机推荐