EF 4.3(代码优先)- 确定何时将项目添加到虚拟 ICollection 属性

2024-03-26

当从查询加载 ICollection 虚拟成员时,有什么方法可以确定实际项目何时添加到 ICollection 虚拟成员中?

希望下面的代码能够证明我的观点!

public class DbAppointment
{
    public DbAppointment()
    {
    }

    public virtual int AppointmentId { get; set; }
    public virtual string Subject { get; set; }
    public virtual string Body { get; set; }
    public virtual DateTime Start { get; set; }
    public virtual DateTime End { get; set; }

   private ICollection<DbExceptionOcurrence> exceptionOcurrences;
   public virtual ICollection<DbExceptionOcurrence> ExceptionOcurrences
   {
        get { return exceptionOcurrences; }
        set
        {
            exceptionOcurrences = value;
        }
    }
}

and

public class DbExceptionOcurrence
{
    public DbExceptionOcurrence()
    {
    }

    public virtual int ExceptionId { get; set; }
    public virtual int AppointmentId { get; set; }
    public virtual DateTime ExceptionDate { get; set; }
    public virtual DbAppointment DbAppointment { get; set; }
}

加载这些的代码是

        Database.SetInitializer(new ContextInitializer());
        var db = new Context("EFCodeFirst");

        // when this query executes the DbAppointment ExceptionOcurrenes (ICollection) is set
        // but for some reason I only see this as an empty collection in the virtual setter DbAppointment
        // once the query has completed I can see the ExceptionOcurrences
        var result = db.Appointments.Include(a => a.ExceptionOcurrences).ToList();

在每个项目的 DbAppointment ICollection ExceptionOcurrences setter 中,我需要执行一些附加逻辑。我遇到的问题是,只有在创建 DbAppointment 对象后我才似乎拥有此信息。

有什么方法可以确定何时添加项目,以便我可以执行我的逻辑。

干杯 腹肌


显然,您所看到的行为意味着实体框架创建并填充类似于以下内容的集合:

// setter called with empty collection
dbAppointment.ExceptionOcurrences = new HashSet<DbExceptionOcurrence>();

// only getter gets called now
dbAppointment.ExceptionOcurrences.Add(dbExceptionOcurrence1);
dbAppointment.ExceptionOcurrences.Add(dbExceptionOcurrence2);
dbAppointment.ExceptionOcurrences.Add(dbExceptionOcurrence3);
//...

我本来希望你能使用对象物化事件 http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.objectmaterialized.aspx(可以注册DbContext就像这个例子一样:https://stackoverflow.com/a/4765989/270591 https://stackoverflow.com/a/4765989/270591,EventArgs 包含物化实体)但不幸的是文档说:

在所有标量、复数和引用之后引发此事件 已在对象上设置属性,但在收集之前 已加载.

看来您必须在完全加载结果集合后运行它,并在每个结果项上调用一些方法,以在导航集合上执行自定义逻辑。

也许另一个选择是创建一个自定义集合类型来实现ICollection<T>与一个事件处理程序Add方法,并允许您在每次添加新项目时挂钩一些逻辑。模型类中的导航集合必须是该类型。甚至会ObservableCollection<T>适合这个目的。

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

EF 4.3(代码优先)- 确定何时将项目添加到虚拟 ICollection 属性 的相关文章

随机推荐

  • Docker 镜像存储在主机的哪里?

    我设法在目录下找到容器 var lib docker containers 但我找不到图像 下有哪些目录和文件 var lib docker 的内容 var lib docker目录因情况而异Docker 用于存储的驱动程序 https g
  • 104、“连接由对等方重置”套接字错误,或关闭套接字何时会导致 RST 而不是 FIN?

    我们正在并行开发 Python Web 服务和客户端网站 当我们从客户端向服务发出 HTTP 请求时 一次调用会在 socket py 的 read 中持续引发一个 socket error 104 Connection reset by
  • 地图样式更改时 Google 地图会更改图标标记

    我正在做一个网络动态项目 在我的 html jsp 页面主体中使用 Google 地图 我创建了一个函数 通过 lat lng map 创建一个标记 并在标记的参数中使用特殊的 image png 作为图标 在我的地图中 我制作了两种不同的
  • Jquery Flot“plothover”事件不起作用

    我有一个似乎无法追踪的问题 我正在使用 Flot 绘制一些数据图表 超级简单 我想添加您在这里看到的悬停效果 浮点数示例 http people iola dk olau flot examples interacting html 不幸的
  • 如何合并 Google 字体导入

    我正在使用带有 Divi 主题的 WordPress 有这样的代码 function et divi fonts url fonts url Translators If there are characters in your langu
  • 为什么调用 setenv("OS_ACTIVITY_DT_MODE", "disable", 1) 不会影响日志记录?

    可以通过设置在 Swift 中隐藏由第 3 方库生成的过于详细的日志OS ACTIVITY MODE环境变量为disable在您的跑步计划中 如下图所示 这让所有人都沉默NSLog您的应用程序的输出 我只想对某些呼叫禁用它 我尝试像这样设置
  • 确定响应者链是否将处理操作

    响应者链很酷 http www cocoanetics com 2012 09 the amazing responder chain 特别是 能够将自定义操作发送给第一响应者 这些操作将冒泡给其他可能感兴趣的人 UIApplication
  • 如何在向上/向下滚动时隐藏/显示视图?

    如何在向上 向下滚动 android 时隐藏 显示视图Foodpanda app 我想隐藏 显示视图 线性或相对布局 ScrollView就像上面的 gif 一样向上 向下 但我的应用程序我不使用 Recyclerview 或列表视图 只是
  • graphviz dot:如何将箭头从节点插入到箭头中心

    我尝试使用 graphviz 包中的 dot 创建用于 MPLUS 分析的图表 有人有使用点可视化结构方程模型 潜在类混合模型的经验吗 特别是有一个功能我不知道如何做得漂亮 我需要从节点到另一个箭头中心的箭头 例如 C V A gt B 我
  • 尝试在 Preg_Match 中查找正斜杠

    我已经搜索了几个小时试图找到解决方案 我正在尝试确定 REQUEST URI 是否合法 并从那里对其进行分解 samplerequesturi variable 12345678910 要确定它是否合法 第一部分variable仅是字母并且
  • 使用单个字符或仅一个字符串进行 boost split

    我希望将字符串拆分为单个字符或字符串 我想用boost split因为 boost string 是我们基本字符串处理的标准 我不想混合几种技术 在单个字符的情况下我可以做split vec str is any of 但我想知道是否有办法
  • boost 的另一个“ld:未找到架构 x86_64 的符号”问题,这次是 mgiza

    我很抱歉问了这样一个常见的问题 我找不到任何可行的或足够清晰的解决方案供我实施 我只是想安装mgiza https github com moses smt mgiza 这是安装文件 cmake make make install If y
  • 监听队列(事件驱动,无轮询)服务总线/存储队列

    我试图弄清楚如何侦听队列上的事件 尤其是入队事件 假设我有一个控制台应用程序和一个服务总线队列 主题 如何连接到队列并等待新消息 我试图在没有While true 和不断的轮询 我试图以一种相当监听的方式来做更多的事情 比如保持连接到队列的
  • Grails 全局约束

    在 1 2 版本中 Grails 引入了全局约束 我尝试将以下内容添加到 Config groovy grails gorm default constraints notBlank nullable false blank false 然
  • NHibernate ThenFetchMany 正在检索重复的子项

    我有一个父对象 其子集合包含一个元素 子集合包含一个包含 3 个元素的 孙子 集合 我使用 NHibernate 从数据库加载父对象 如下所示 Parent parentObject session Query
  • Start-Process 与 Start-Sleep 不能很好地配合

    我的目标是运行多个进程并保存它们ProcessName and Id供以后使用 这是我的代码 System Collections ArrayList startedProcesses processStatus Start Process
  • 简单/基本的隐写算法和方法

    最基本和最简单的是什么隐写算法和方法 我的意思是应用于图像的隐写术 将数据隐藏到图像的简单程序如何工作 主要使用了哪些技术 程序如何在没有源图像的情况下识别图像中的加密消息 基本且最简单的隐写算法和方法是什么 我的意思是应用于图像的隐写术
  • Three.js ShaderMaterial 灯光问题

    你好 这是我的代码的一部分 地球仪 function createGlobe var normalMap THREE ImageUtils loadTexture images earth normal 2048 jpg var surfa
  • 在 django admin 过滤器 list_filter 中选择多个选项?

    目前我通过 django 管理界面中的某些选项进行过滤 例如 假设我按 按状态 过滤 是否可以选择多个状态来过滤结果 这是过滤器的屏幕截图 我可以从此列表中选择多个项目吗 不在管理 UI 中 但如果修改 URL 则可以使过滤条件更加复杂 例
  • EF 4.3(代码优先)- 确定何时将项目添加到虚拟 ICollection 属性

    当从查询加载 ICollection 虚拟成员时 有什么方法可以确定实际项目何时添加到 ICollection 虚拟成员中 希望下面的代码能够证明我的观点 public class DbAppointment public DbAppoin