EF4.3 代码优先、MVC、在 POST 操作中附加后延迟加载

2024-02-07

我在 MVC 3 应用程序中使用带有 Code-First 的 Entity Framework 4.3。我有一个 POST 操作,它获取一个实体作为其参数,然后将该实体标记为已修改以更新数据库。它是一个具有对文件类型的引用的文档实体。

 [HttpPost]
 public ActionResult Example(Document model)
 {
     // fileType is null, as expected
     var fileType = model.FileType;

     // attach and mark the entity as modified, save changes
     Context.Entry(model).State = EntityState.Modified;
     Context.SaveChanges();

     // fileType is still null?
     fileType = model.FileType;

     return View(model);
 }

将实体附加到上下文后,我是否应该能够延迟加载该实体上的属性?

有趣的是,当我在控制台应用程序中尝试这个时,它似乎有效。

static void Main()
{
    // create a new context
    var context = new Context();

    // get the first document and detach it
    var doc = context.Documents.First();
    context.Entry(doc).State = EntityState.Detached;

    // fileType is null, as expected
    var fileType = doc.FileType;

    // dispose and create a new context
    context.Dispose();
    context = new Context();

    // attach the entity and mark it as modified
    context.Entry(doc).State = EntityState.Modified;

    // fileType is not null, which is the desired outcome
    fileType = doc.FileType;
}

问题在于传递给 post 方法的实体不是代理,可能是因为它是使用普通的“new”运算符在实体框架之外创建的。

这里有几个选项。首先,您可以修改 MVC 控制器以使用以下命令创建代理实例DbSet.Create方法。我听说可以通过这种方式修改 MVC 控制器,但我自己从未尝试过。例如,不要这样做:

var doc = new Document();

在控制器中,你会这样做:

var doc = context.Documents.Create();

如果实体具有适当的虚拟属性(在您的情况下看起来确实如此),则 create 方法允许 EF 创建延迟加载的代理。

第二个可能更简单的选择是不使用延迟加载,而是使用显式加载 API。例如,要加载 FileType:

var fileType = context.Entry(doc).Reference(d => d.FileType).Load();

不太可能延迟加载,这需要对上下文的显式引用,但在您的情况下应该没问题。

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

EF4.3 代码优先、MVC、在 POST 操作中附加后延迟加载 的相关文章

随机推荐

  • 什么时候应该使用按位运算符?

    我阅读了以下 Stack Overflow 问题 并且了解了按位和逻辑之间的区别 参考 这个符号在 PHP 中意味着什么 https stackoverflow com questions 3737139 reference what do
  • DataSets to POCOs - 有关 DAL 架构的询问

    我必须非常快速地开发一个相当大的 ASP NET MVC 项目 并且我想获得一些关于我的 DAL 设计的意见 以确保不会有任何问题困扰我 因为 BL 可能会变得相当复杂 一些背景知识 我正在使用 Oracle 后端 因此内置的 LINQ t
  • scala并行收集处理的性能

    我遇到过需要一次处理数千条记录的情况 有时 可能有数百条 甚至可能多达 30000 条记录 我正在考虑使用scala的并行集合 为了理解其中的区别 我编写了一个简单的 pgm 如下所示 object Test extends App val
  • 当目标应用程序以管理员身份运行时,ShowWindow 功能不起作用

    我正在编写一个程序来显示 隐藏某些目标应用程序的窗口 我之前测试过它并注意到一些奇怪的事情 如果我以管理员身份运行目标应用程序 右键单击 gt 属性 兼容性 选项卡 以管理员身份运行此程序 它不起作用 为了演示 我编写了一个名为 Targe
  • Bundle install 将 gems 安装在 ./mysql2 文件夹中

    我最近在我的机器上升级了mysql 因此 我正在尝试相应地更新我的 mysql2 gem 在此过程中 我运行 bundle install 由于某种原因 我的 Gemfile 中的所有 gem 都安装在 mysql2 目录中 ruby 1
  • 如何在 Ruby 中计算标准差?

    我有几条具有给定属性的记录 我想找到标准差 我怎么做 module Enumerable def sum self inject 0 accum i accum i end def mean self sum self length to
  • Java中如何检查一个日期是否大于另一个日期? [复制]

    这个问题在这里已经有答案了 我正在开发一个 Java 应用程序 它生成用户在命令行中输入的持续时间的报告 用户需要按以下格式输入日期 dd MM yyyy gt java report startDate endDate Example j
  • TS2683 (TS) 'this' 隐式具有类型 'any',因为它没有类型注释

    我在 TypeScript 文件中遇到了这个问题 想知道如何解决这个问题 现在我已经抑制了这个打字稿异常 但想了解如何解决这个问题 以下是我的代码 export class BaseResult isSuccessful boolean t
  • 如何在 Rust 中迭代 Hashmap、打印键/值并删除值?

    对于任何语言来说 这都应该是一个微不足道的任务 这在 Rust 中不起作用 use std collections HashMap fn do it map mut HashMap
  • Angular 2 @ViewChild 不起作用。无法读取未定义的属性“标题”

    即使使用 ViewChild 导入后 我也无法访问组件的属性 下面是代码 header monitor component ts import AdminComponent from admin admin component import
  • Content-Script-Type 和 Content-Style-Type 有什么意义

    考虑这两行 来自 W3 的文档脚本编写 http www w3 org TR html4 interact scripts html 在该部分默认脚本语言 http www w3 org TR html4 interact scripts
  • 即时渲染视图

    我正在开发一个 ASP NET MVC 应用程序 它将向用户发送一封确认电子邮件 对于电子邮件本身 我想创建一个视图 然后呈现该视图并使用 NET 邮件对象发送它 我如何使用 MVC 框架来做到这一点 你基本上需要使用IView Rende
  • 记录在可枚举相等性上返回 false [重复]

    这个问题在这里已经有答案了 测试新的 C 9 记录 并希望澄清为什么序列相等在记录上不起作用 假设我有以下代码 public record Person string FirstName string LastName 以下代码将返回 tr
  • 如何在没有服务器或 UI 的情况下从嵌入式报表定义生成 PDF?

    独立的可执行文件是否可以生成报告并将其输出为 PDF 或报告查看器提供的其他导出选项之一 而不显示 ReportViewer 控件 报表定义应嵌入到可执行文件中 并且不应使用 Reporting Services Web 服务 实际上你根本
  • 如何以类似热图的方式在 ggplot2 中的地图顶部绘制样方计数

    我试图获取一个 shapefile 和其中包含的点 并最终得到 shapefile 点的绘图 然后最终在顶部覆盖有一定量的 alpha 透明度的样方分析 我尝试并想出了这个应该可以使用的示例 library ggplot2 library
  • Google Colaboratory 10-15 分钟后断开连接

    我正在尝试在 Google colab 上训练我的深度学习模型 他们提供免费的 K80 GPU 我了解到它一次可以使用12小时 然后你必须重新连接它 但我的连接在 10 15 分钟后丢失 并且无法重新连接 它停留在初始化状态 这里有什么问题
  • Spring Kafka 客户端 SSL 设置

    我的设置 JDK 11 0 6 Spring Boot 2 2 4 RELEASE 春天卡夫卡2 4 1 我已经在明文中验证了我的 Zookeeper Kafka 客户端应用程序 一切正常 我还使用 Kafka 客户端工具验证了我的密钥库
  • 如何更改 Netbeans 中 toString() 代码片段的功能

    Netbeans IDE 中是否有可能如何从上下文菜单中更改其在 into toString Alt Shift S 代码片段功能中的行为 我想在最终生成的 toString 方法中包含从类及其超类中选择的方法 主要是吸气剂 我不知道是否可
  • 在tensorflow 2.0中的自定义损失和梯度代码中获取全无梯度

    我正在尝试在tensorflow 2 0中编写一个非常基本的损失函数 总之 我有 5 个类 我想使用一种热编码进行训练 而不对其中任何一个进行分组 我希望我的模型能够用 5 个类别中每个类别的值来预测每个输入 之后 我想尝试获取两个最高值
  • EF4.3 代码优先、MVC、在 POST 操作中附加后延迟加载

    我在 MVC 3 应用程序中使用带有 Code First 的 Entity Framework 4 3 我有一个 POST 操作 它获取一个实体作为其参数 然后将该实体标记为已修改以更新数据库 它是一个具有对文件类型的引用的文档实体 Ht