以编程方式检索流畅配置而不实例化DbContext

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

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

  • ObjectContext的
  • EntityObjects
  • EntityContainer相关
  • EntitySets
  • 诸如此类

由于我们没有使用属性属性,因此reflection无济于事。

这在运行时可以正常工作,但在T4模板中实现DbContext会导致各种问题。 它有时会崩溃VS,产生奇怪的错误,产生循环依赖等。

如果我调试T4模板,它确实运行没有错误,但后台进程锁定包含DbContext类和实体的项目。 因此,每次实体发生变化时,我都必须重新启动VS三次,执行不同的步骤。 呸!

我想知道是否有办法检索实体元数据/配置而不实例化上下文类。 任何指导将不胜感激。

好吧,你需要加载上下文,因为它需要至少调用OnModelBuilding(DbModelBuilder)才能完成它的业务; 否则没有模型可以讯问。

如果需要,可以使用EdmxWriter将信息存储为XML;

  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文件中查询该文件。