您的位置:首页 > 编程语言 > C#

2步解决EF生成实体类无注释问题的快捷方法,亲测成功

2017-12-01 21:09 513 查看
一直用pd生成实体类,今天试了下用vs生成实体类,网上很多资料,但大部分操作太繁琐,本人整理2步搞定

1、下载GetSummery.ttinclude,点击下载,并将其中的ConnectionStringName变量值site换成自己的数据库连接串,记得数据数连接串必须加 providerName="System.Data.SqlClient",不加会报错:正在运行转换: System.ArgumentException: 应为“providerInvariantName”参数的非空字符串;

2、改.tt文件,直接搜索<#=codeStringGenerator.Property(edmProperty)#>,将此句前所有代码替换成以下代码:

<#@ template language="C#" debug="false" hostspecific="true"#>

<#@ include file="EF6.Utility.CS.ttinclude"#>

<#@ include file="GetSummery.ttinclude"#>

<#@ output extension=".cs"#>

<#

const string inputFile = @"Model1.edmx";

var textTransform = DynamicTextTransformation.Create(this);

var code = new CodeGenerationTools(this);

var ef = new MetadataTools(this);

var typeMapper = new TypeMapper(code, ef, textTransform.Errors);

var fileManager = EntityFrameworkTemplateFileManager.Create(this);

var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile);

var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef);

if (!typeMapper.VerifyCaseInsensitiveTypeUniqueness(typeMapper.GetAllGlobalItems(itemCollection), inputFile))

{

    return string.Empty;

}

WriteHeader(codeStringGenerator, fileManager);

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))

{

    fileManager.StartNewFile(entity.Name + ".cs");

    BeginNamespace(code);

#>

<#=codeStringGenerator.UsingDirectives(inHeader: false)#>

/// <summary>

/// <#= getTableSummery(code.Escape(entity)) #>

/// </summary>

<#=codeStringGenerator.EntityClassOpening(entity)#>

{

<#

    var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(entity);

    var collectionNavigationProperties = typeMapper.GetCollectionNavigationProperties(entity);

    var complexProperties = typeMapper.GetComplexProperties(entity);

    if (propertiesWithDefaultValues.Any() || collectionNavigationProperties.Any() || complexProperties.Any())

    {

#>

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]

    public <#=code.Escape(entity)#>()

    {

<#

        foreach (var edmProperty in propertiesWithDefaultValues)

        {

#>

        this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>;

<#

        }

        foreach (var navigationProperty in collectionNavigationProperties)

        {

#>

        this.<#=code.Escape(navigationProperty)#> = new HashSet<<#=typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType())#>>();

<#

        }

        foreach (var complexProperty in complexProperties)

        {

#>

        this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>();

<#

        }

#>

    }

<#

    }

    var simpleProperties = typeMapper.GetSimpleProperties(entity);

    if (simpleProperties.Any())

    {

        foreach (var edmProperty in simpleProperties)

        {

#>

/// <summary>

/// <#= getColumnSummery(code.Escape(entity),code.Escape(edmProperty)) #>

/// </summary>

<#=codeStringGenerator.Property(edmProperty)#>

......

刷新下.tt看实体类已经有注释了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  生成实体类 EF c#
相关文章推荐