我想在EF 4.5 edmx .tt文件中放置两个使用指令,但我遇到了麻烦。 4.0语法不同,更易于操作。
任何帮助将不胜感激.... EF 4.0语法:
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
4.5语法
public string UsingDirectives(bool inHeader, bool includeCollections = true)
{
return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
? string.Format(
CultureInfo.InvariantCulture,
"{0}using System;{1}" +
"{2}",
inHeader ? Environment.NewLine : "",
includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "",
inHeader ? "" : Environment.NewLine)
: "";
}
我需要在.tt文件中添加以下属性:
EF 4.0语法
[Serializable]
[DataContract(IsReference = true)]
<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#>
{
<#
4.5语法
public string EntityClassOpening(EntityType entity)
{
return string.Format(
CultureInfo.InvariantCulture,
"{0} {1}partial class {2}{3}",
Accessibility.ForType(entity),
_code.SpaceAfter(_code.AbstractOption(entity)),
_code.Escape(entity),
_code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
}
4.0语法
void WriteProperty(string accessibility, string type, string name, string getterAccessibility, string setterAccessibility)
{
#> [DataMember]
<#=accessibility#> <#=type#> <#=name#> { <#=getterAccessibility#>get; <#=setterAccessibility#>set; }
<#+
}
4.5语法 我找不到任何类似的语法**
基本上,我希望从edmx文件重新生成类的输出如下所示:
using System;
using System.Collections.Generic;
using System.Runtime.Serialization; using System.ServiceModel;
namespace YeagerTechModel
{
[Serializable]
[DataContract(IsReference = true)]
public partial class Priority
{
public Priority()
{
this.Projects = new HashSet<Project>();
}
[DataMember]
public short PriorityID { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public virtual ICollection<Project> Projects { get; set; }
}
}
答案 0 :(得分:3)
您是否认真不懂代码并且不知道如何更改代码?它只是一个字符串格式...即使您不理解格式,您仍然可以像在之前的版本中那样直接更新模板,因此您甚至无法理解文本模板的工作原理。你应该花一些时间在基础教程上。
这里有一些例子
Usings:
public string UsingDirectives(bool inHeader, bool includeCollections = true)
{
var usings = new List<string>() {
"using System;",
"using System.Runtime.Serialization;",
"using System.ServiceModel;"
};
if (includeCollections) {
usings.Add("using System.Collections.Generic;");
}
return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
? string.Format(
CultureInfo.InvariantCulture,
"{0}{1}{2}",
inHeader ? Environment.NewLine : "",
String.Join(Environment.NewLine, usings),
inHeader ? "" : Environment.NewLine)
: "";
}
类别:
public string EntityClassOpening(EntityType entity)
{
const string attributes = "[Serializable, DataContract(IsReference = true)]";
return string.Format(
CultureInfo.InvariantCulture,
"{0}{1}{2} {3}partial class {4}{5}",
attributes,
Environment.NewLine,
Accessibility.ForType(entity),
_code.SpaceAfter(_code.AbstractOption(entity)),
_code.Escape(entity),
_code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
}
属性:
public string Property(EdmProperty edmProperty)
{
return string.Format(
CultureInfo.InvariantCulture,
"[DataMember] {0} {1} {2} {{ {3}get; {4}set; }}",
Accessibility.ForProperty(edmProperty),
_typeMapper.GetTypeName(edmProperty.TypeUsage),
_code.Escape(edmProperty),
_code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
_code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
}
public string NavigationProperty(NavigationProperty navigationProperty)
{
var endType = _typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType());
return string.Format(
CultureInfo.InvariantCulture,
"[DataMember] {0} {1} {2} {{ {3}get; {4}set; }}",
AccessibilityAndVirtual(Accessibility.ForProperty(navigationProperty)),
navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType,
_code.Escape(navigationProperty),
_code.SpaceAfter(Accessibility.ForGetter(navigationProperty)),
_code.SpaceAfter(Accessibility.ForSetter(navigationProperty)));
}