EF6:另一个项目中商业模式的T4模板

本文关键字:模式 T4 模板 另一个 项目 EF6 | 更新日期: 2023-09-27 17:59:21

使用教程:http://www.asp.net/mvc/tutorials/mvc-5/database-first-development/creating-the-web-application我创建了一个Entity Framework版本6文件(.edmx),其中包含子文件。这个文件在我的项目中:SimpleSalesOrder.DataLayer.SQL.

到目前为止一切都很好,但我想在我们的SimpleSalesOrder.BusinessModel.SQL项目中生成业务模型类,以将数据层与业务模型分离。

我确信我必须编辑T4模板才能使其工作。命名空间本身没有问题,因为我可以在创建EF Contect时输入它。

我找到了创建文件的点:

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))    
{
     fileManager.StartNewFile(entity.Name + ".cs");
     BeginNamespace(code);
#>

但正如你所看到的,它只传递类名。输出本身在过程程序中设置:

var outputPath = Path.GetDirectoryName(_textTransformation.Host.TemplateFile);

因此,将此名称设置为BusinessModel的名称是没有问题的。但这就是办法吗?有没有一种更简单的方法可以做到这一点?我可以想象很多人会想把BusinessModels从DataLayer中分离出来。

提前感谢,晚安!

Matthias

EF6:另一个项目中商业模式的T4模板

为了简化,您的需求:基于项目A中定义的实体模型将文件生成到项目B中。

看起来你在这里的主要问题是你的T4模板文件在项目A中。

简单的解决方案是将T4文件移动到项目B中,更新.edmx文件的路径(或者,如果您首先使用EF代码,则更新程序集引用),以指向项目A中EF源的物理路径。

提示:如果可以的话,可以使用相对路径,但完全限定路径也可以。

问题:您正在使用的.tinclude旨在生成与模板文件位于同一文件夹路径中的文件,在VS解决方案资源管理器中,生成的文件将嵌套在模板文件下。

可以修改ttinclude文件,但这会使问题过于复杂。