我有一个 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(使用前将#替换为@)