EF6:T4模板用于另一个项目中的Businessmodels

时间:2014-04-22 21:08:39

标签: c# entity-framework

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

到目前为止一切都很好,但我想在SimpleSalesOrder.BusinessModel.SQL项目中生成业务模型类,以便从BusinessModel中分离DataLayer。

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

我找到了创建文件的Point:

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

但是你可以看到,它只传递了Class-Name。 输出本身在流程程序中设置:

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

所以没有问题可以将此名称设置为BusinessModel的名称。但这是做到这一点的方法吗?有没有更简单的方法来完成这项工作?我可以想象很多人都希望从DataLayer中分离BusinessModel。

提前致谢,祝你晚安!

的Matthias

1 个答案:

答案 0 :(得分:0)

简化您的要求:根据项目A中定义的实体模型生成文件到项目B中。

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

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

  

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

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

可以修改ttinclude文件,但是你过度复杂了。