我们在EF6.1中使用Code First - 我们的模型现在超过300多个表,启动时间很荒谬。我们已经尝试过预生成视图,但它没有多大帮助,它是Code First管道中的模型编译,占用了大部分时间。
我们将尝试使用Database / Model First方法通过使用具有到CSDL,SSDL和MDL文件的元数据链接的实体连接字符串而不是直接SQL连接来初始化上下文。这将是我们理想的过程:
初始测试显示启动时间缩短了约80% - 这里棘手的部分是在第1步中进行构建后资源嵌入!
任何人都可以提供有关如何在MSBuild中完成第1步的任何线索吗?是否有另一种策略可行?基本上我们想要一个零维护解决方案,这样开发人员就不必手动执行除构建代码之外的任何其他操作,也没有特殊的部署注意事项。
编辑:
我们最终使用了一个新的独立类库项目,该项目引用了包含Code First模型的项目。该项目包含一个T4模板,它将EDMX从DbContext写入内存,然后将组件部分保存到已标记为嵌入资源的项目文件中,因此我们也获得了源代码控制。
构建顺序保证资源始终是最新的,实体连接字符串在运行时引用此资源程序集。通过使用T4 MSBuild集成目标完成MSBuild集成,以便模板始终在项目构建期间运行。
答案 0 :(得分:2)
您当然可以使用MSBuild执行此操作。你将不得不拿起一些构建脚本,但不应该太糟糕。
你现在怎么样?您是否有运行的控制台应用程序来生成edmx?听起来你已经完成了很难 - 与MSBuild集成应该很容易。我会假设你这样做,并从那里开始。
btw:首先要知道的是.csproj文件是 MSBuild脚本,因此任何自定义MSBuild脚本都可以进入这些csproj文件。为了增加复杂性,您可以:
关于最后一个选项(自定义构建任务)的一个好处是,您可以将错误消息写回构建过程。如果任务失败,这应该有助于获取有用的信息,如果您使用构建服务器,那么服务器应该以与任何其他构建消息相同的方式接收这些消息。