在T4模板中获取edmx的命名空间

时间:2012-01-25 03:19:47

标签: c# visual-studio code-generation t4

当我将模板安装到与edmx命名空间不同的命名空间时,由于缺少命名空间,生成的代码会出错。

所以我试图添加一个“using”语句来解决这个问题,但我不知道如何获得edmx所在的命名空间。

我到目前为止(为简洁起见):

<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#@ output extension=".cs"#>

const string edmxFile = @"../Entities/NorthwindEntities.edmx";

CodeGenerationTools code = new CodeGenerationTools(this);

string namespaceName = code.VsNamespaceSuggestion();
string edmxNamespaceName = "???";

using System;
using System.Data.Objects;
using System.Data.Objects.DataClasses;
using <#= edmxNamespaceName #>;

namespace <#= namespaceName #>
{
    // ...
}

请帮我解决“edmxNamespaceName”。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用MetadataLoader类

<#
string edmxFile = @"../Entities/NorthwindEntities.edmx";
CodeGenerationTools code = new CodeGenerationTools(this);

MetadataLoader loader = new MetadataLoader(this);
string modelNamespace = loader.GetModelNamespace(edmxFile);
#>

using System;
using System.Data.Objects;
using System.Data.Objects.DataClasses;
using <#=code.Escape(modelNamespace)#>;

答案 1 :(得分:0)

这是旧的,但是由于偶然发现它寻找答案,因此我将提供我发现的内容... * .tt的属性包括一个名为“自定义工具命名空间”的选项。这将覆盖MetadataLoader的使用,后者会查看物理结构来确定名称空间。我必须为旧数据库的第一个项目的.Context.tt和.tt文件都设置此值。

请相信此回复here,使我走上正确的道路。