以编程方式检索流畅配置,无需实例化 DbContext

2023-12-09

我有一个 DbContext 派生类,其成员实体类是使用 Fluent API 配置的。我想以编程方式检索这些配置和关系。执行此操作的代码已经就位,我将其移植到 T4 模板以进行代码生成。

虽然大多数代码生成都使用反射,但流畅的配置需要实例化上下文类才能获得:

  • 对象上下文
  • 实体对象
  • 实体容器
  • 实体集
  • Etcetera

由于我们没有使用属性,反射没有任何帮助。

这在运行时工作正常,但在 T4 模板中实例化 DbContext 会导致各种问题。它有时会导致 VS 崩溃、给出奇怪的错误、创建循环依赖等。

如果我调试 T4 模板,它运行时不会出现错误,但后台进程会锁定包含 DbContext 类和实体的项目。因此,每次实体发生更改时,我都必须重新启动 VS 3 次,执行不同的步骤。哎呀!

我想知道是否有一种方法可以在不实例化上下文类的情况下检索实体元数据/配置。任何指导将不胜感激。


好吧,您需要加载上下文,因为它需要调用OnModelBuilding(DbModelBuilder)至少一次开展业务;否则就没有模型可供询问。

如果需要,您可以使用以下方法将信息存储为 XMLEdmxWriter;

    public static string ToEdmx(this System.Data.Entity.DbContext context)
    {
        var sb = new StringBuilder();

        using (var textWriter = new StringWriter(sb))
        using (var xmlWriter = System.Xml.XmlWriter.Create(textWriter, new System.Xml.XmlWriterSettings { Indent = true, IndentChars = "    " }))
        {
            System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(context, xmlWriter);
            textWriter.Flush();
        }

        return sb.ToString();
    }

这将为您提供带有数据模型的 XML 文档。您可以在一个进程中将其保存到磁盘,然后在 TT 文件中查询该文件。

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

以编程方式检索流畅配置,无需实例化 DbContext 的相关文章

随机推荐

  • 将字符串转换为数组

    我有一根绳子 就像 string key1 value1 key2 value2 key3 value3 如何从给定的字符串中获取数组 如下所示 array array key1 gt value1 key2 gt value2 key3
  • Laravel angularJS CORS 使用 barryvdh/laravel-cors

    六个小时过去了 我仍然没有得到以下问题的解决方案 我正在尝试让 AngularJS 从不同的域访问我的 API 在网上搜索后我发现了这个package它说它可以 在 Laravel 应用程序中添加 CORS 跨源资源共享 标头支持 我遵循了
  • C# 和 Java 之间的主要区别是什么?

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我只想澄清一件事 这不是哪个更好的问题 这部分我留给其他人讨论 我不在乎 我在面试时被问到这个问题 我认为了解更多可能会有用 这些
  • Resource.properties 文件中的多行值?

    我有一个多行值Resource properties file TXT ABOUT first line second line n third line 我将其显示在 关于 框中
  • Python 多处理全局 numpy 数组

    我有以下脚本 max number 100000 minimums np full max number np inf dtype np float32 data np zeros max number 128 128 128 dtype
  • R.anim 中缺少动画,ImageSwitcher 中缺少进度条

    我喜欢动画中的两张幻灯片 我认为缺少哪些 我怎样才能做到这一点 一切都会很好 android R anim slide in right android R anim slide out left 我想插入一些图片 反之亦然 另一方面 是否
  • 通过WMI创建/删除磁盘分区

    有没有办法通过 WMI 创建 删除磁盘分区 我已经能够挂载 卸载虚拟磁盘 vhd 并列出其分区 据我所知 WMI 中没有办法创建 删除分区 您可能想查看外壳函数
  • Eclipse 远程调试预启动脚本?

    我创建了一个 C C 远程应用程序 调试配置eclipse并且能够远程调试我的应用程序 我选择使用 仅 SSH 连接选项 并注意到 结果 在我的远程系统资源管理器 RSE in eclipse 当我运行配置时 该工具会自动将我的二进制文件部
  • 如何创建透明背景的渐变框阴影?

    我想用渐变框阴影制作div 我已经找到了如何处理 before 和模糊效果 但我想制作具有透明背景的div 例如 div height 200px width 200px background color rgba 255 255 255
  • 取消 Laravel 中的作业

    如果我调用以下内容 return AdventureJob dispatch event gt character gt refresh event gt adventure event gt levelsAtATime gt delay
  • THE 7 不尊重java安全随机种子

    我手头有一个难题 我创建了一个 AES 服务来加密 解密敏感信息 AES 密钥是使用 java 随机生成的SecureRandom 我有一个受保护的文件 用于存储种子 并且在调用服务时 种子将填充到安全随机类中 为了确保它有效 我有以下逻辑
  • 改变 PopupWindow 的重力

    我有一个必须显示弹出窗口的按钮 并且弹出窗口必须与按钮的右侧对齐 我就是这么做的 button setOnClickListener new View OnClickListener Override public void onClick
  • 如何在z3py中连接正则表达式?

    我想构造一个正则表达式 例如a b c z3中有一个函数re 可以将3个正则表达式连接在一起 所以我可以构造a b c 如下所示 assert str in re aabbc re re str to re a re str to re b
  • 适用于阿拉伯语、中文和希腊语的 Google TTS API

    我正在尝试从 google TTS API 下载 mp3 文件 这是代码 try String path http translate google com translate tts tl en q hello this is the n
  • Google Analytics API 错误 403:“用户无权访问个人资料”

    我一直在尝试学习如何使用Google Analytics API来获取网站流量数据 我不断遇到错误 提示用户无权访问该配置文件 我将服务帐户中的电子邮件地址添加到用户中 并尝试将其设置为有权访问所有配置文件的用户和管理员 但都不起作用 这是
  • 如何在 golang 结构中声明可为 null 的 json 字段?

    我通常喜欢在结构中使用原始数据类型的指针 这样当我 json Marshal 它们时 nil字段总是被翻译为 field null在 json 字符串中 但这将使创建新的结构实例变得困难 因为我无法使用文字 例如 type Book str
  • 如何在 Windows 启动时最小化应用程序 - Visual Basic

    这段代码有什么问题 我无法在启动时关闭我的应用程序 如果我改变me close 它实现了另一个值 但是对于me close 事实并非如此 我是编码和 Visual Basic 新手 Dim oktoclose As Boolean Priv
  • Twig:允许 HTML,但转义脚本

    我正在调查一个可能的XSS我的应用程序的攻击向量 我拥有的 FormType 带有单个textarea场地 通常该字段可以包含html tags Twig呈现插入数据的模板 我使用该表单插入以下内容 b Some valid HTML te
  • 在 session_destroy() 之后保留会话变量

    从我的 logout php
  • 以编程方式检索流畅配置,无需实例化 DbContext

    我有一个 DbContext 派生类 其成员实体类是使用 Fluent API 配置的 我想以编程方式检索这些配置和关系 执行此操作的代码已经就位 我将其移植到 T4 模板以进行代码生成 虽然大多数代码生成都使用反射 但流畅的配置需要实例化