当我将模板安装到与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”。
谢谢!
答案 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,使我走上正确的道路。