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看实体类已经有注释了
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看实体类已经有注释了
相关文章推荐
- Junit4自动生成的测试类的注释中,日期乱码问题解决方法
- 非常实用的办法IDEA解决alt+insert快捷键生成getter,setter方法不带注释问题
- 诡异的问题:Excel做报表打印,莫名在根目录生成快捷方式的解决方法
- EF6.0 生成的代码中没有注释的解决方法
- 【转载】解决浏览器和discuz7.0论坛不兼容的方法,解决快捷回复弹出下载窗口的问题
- NetcfSvcUtil生成的WCF代理类保存数字类型到Server端总为0问题解决方法
- EF.使用反射解决实体类型转换问题
- eclipse 生成javadoc乱码问题解决 方法
- 安装VS2003出现问题——Microsoft FrontPage 2000 Web 扩展客户端安装不成功 及其解决方法
- 使用mule生成WSDL中文乱码问题解决方法
- GridView动态生成字段常见问题及解决方法
- hibernate dao保存实体,提示成功,但未保存入数据库,解决方法
- SSH集成后HibernateTemplate的save方法执行成功但是不持久化到数据库的问题解决办法
- C#注释文档生成的HTML问题解决
- sql2005管道的另一端上无任何进程、已成功与服务器建立连接,但是在登录过程中发生错误 一系列问题完整解决方法
- 崩溃,source Insight显示linux代码中文注释乱码问题,以及很傻很天真的解决方法
- PHP生成excel时单元格内换行问题的解决方法
- powerdesigner中生成数据库脚本时出现长度限制问题的解决方法
- [转]关于PowerDesigner反向工程SQL Server2000数据库时生成注释的解决方法
- MyEclipse生成的Spring+Hibernate无法保存数据问题的解决方法