수색…


모델에 동적으로 인터페이스 추가

추상화가 필요한 경우 상당히 큰 기존 모델을 사용하여 작업 할 때 인터페이스가있는 모델을 다시 장식하기 위해 비용이 많이 드는 경우가 있습니다. 이 경우 모델 생성에 동적 동작을 추가 할 수 있습니다.

다음 예제에서는 특정 열 이름을 가진 클래스에 인터페이스를 자동으로 추가하는 방법을 보여줍니다.

모델에로 이동합니다 .tt 파일이 수정 EntityClassOpening 방법으로 다음의 방법이 추가됩니다 IPolicyNumber 이 개체에 인터페이스를 POLICY_NO 기둥을 IUniqueIdUNIQUE_ID

public string EntityClassOpening(EntityType entity)
{
    var stringsToMatch = new Dictionary<string,string> { { "POLICY_NO", "IPolicyNumber" }, { "UNIQUE_ID", "IUniqueId" } };
    return string.Format(
        CultureInfo.InvariantCulture,
        "{0} {1}partial class {2}{3}{4}",
        Accessibility.ForType(entity),
        _code.SpaceAfter(_code.AbstractOption(entity)),
        _code.Escape(entity),
        _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)),
        stringsToMatch.Any(o => entity.Properties.Any(n => n.Name == o.Key)) ? " : " + string.Join(", ", stringsToMatch.Join(entity.Properties, l => l.Key, r => r.Name, (l,r) =>  l.Value)) : string.Empty);
}

이는 하나의 특정 사례이지만 .tt 템플릿을 수정할 수있는 능력을 보여줍니다.

엔터티 클래스에 XML 문서 추가

생성 된 모든 모델 클래스에는 기본적으로 추가 된 문서 주석이 없습니다. 생성 된 모든 엔티티 클래스에 XML 문서 주석을 사용하려면 [modelname] .tt ( modelname 은 현재 EDMX 파일 이름 임) 내에이 부분을 찾으십시오.

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
    fileManager.StartNewFile(entity.Name + ".cs");
    BeginNamespace(code); // used to write model namespace
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#> 

아래 예제와 같이 XML 설명서 주석을 UsingDirectives 줄 앞에 추가 할 수 있습니다.

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
    fileManager.StartNewFile(entity.Name + ".cs");
    BeginNamespace(code);
#>
/// <summary>
/// <#=entity.Name#> model entity class.
/// </summary>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#> 

생성 된 문서 주석에는 아래 주어진 엔티티 이름이 포함되어야합니다.

/// <summary>
/// Example model entity class.
/// </summary>
public partial class Example
{
    // model contents
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow