EF生成实体模板改良

也许介绍的方法并不是完美的解决方法

web工程里添加这两项

里面会生成两个模板文件 上下文模板和实体类模板,现在主要对实体类模板进行改良

1.讲using 放在文件头

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

添加

public void WriteHeader(CodeStringGenerator codeStringGenerator, EntityFrameworkTemplateFileManager fileManager)
{
    fileManager.StartHeader();
#>
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
<#=codeStringGenerator.UsingDirectives(inHeader: true)#>
<#+
    fileManager.EndBlock();
}

2.去partial

搜索partial替换为空

3.改命名空间

namespace <#=code.EscapeNamespace(codeNamespace)#> 将这句直接替换成自己的命名空间

4.改可空类型的写法 我们更习惯与int?的这种风格 比较简单就不介绍了

5.添加主键Key特性

这里面将ID统一命名为主键了所以采用了这个比对的效果,如果主键列不固定名称,可以在class最上面添加,也是可以的,不做介绍了

  public string Property(EdmProperty edmProperty)
    {
      if(_code.Escape(edmProperty)=="ID")
      {
      return   string.Format(
            CultureInfo.InvariantCulture,
            @"{5}
    {6}
    {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)),"[Key]","[DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]");
      }
      else
      {
        return string.Format(
            CultureInfo.InvariantCulture,
            "{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)));
      }
    }

6.添加Table特性

  public string EntityClassOpening(EntityType entity)
    {
        return string.Format(
            CultureInfo.InvariantCulture,
            @"{4}
{0} {1}class {2}{3}",
            Accessibility.ForType(entity),
            _code.SpaceAfter(_code.AbstractOption(entity)),
            _code.Escape(entity),
            _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)),
             "[Table(\""+_code.Escape(entity)+"\")]");
    }

最后生成的实体如果格式不对其,可以快捷键设为对齐

另外本人对模板并没有深入的研究,这些改良虽然满足了暂时的生成需求,但是也许方法并不正宗,仅此说明

时间: 2024-10-19 11:13:21

EF生成实体模板改良的相关文章

EF生成实体自动添加数据库字段注释

我们在用EF从数据库生成模型的时候,默认实体类是没有注释的,但是我们已经在数据库字段添加说明了,能不能自动把注释也拿过来? 答案是:能. 那么我们开始 首先随便开一个ASP.NET   MVC项目,我们添加ADO实体数据模型.添加完成后我们打开userinfo.cs(这里我的模型名称为userinfo)如图: 双击打开后发现现在是没有注释的. 然后下载此文件:GetSummery.ttinclude (这个文件没有放下载链接,可以去网上找找,也可以给我留言评论我来给你) 嗯,现在下载完文件后把他

CodeSmith单表生成实体模板

<%@ Template Language="C#" TargetLanguage="C#" %> <%@ Assembly Name="SchemaExplorer"%> <%@ Import Namespace="SchemaExplorer"%> <%@ Property Name="SourceTable" Type="SchemaExplorer

net core 使用ef生成实体类(SqlServer)

1)打开程序包管理器控制台 2)输入命令  Install-Package Microsoft.EntityFrameworkCore.SqlServer 3)输入命令  Install-Package Microsoft.EntityFrameworkCore.Tools 4)输入命令  Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design 5)输入命令  Scaffold-DbContext "Server=你的数据库地

EF生成实体模型注意事项

最新所做项目用的是EF框架,EF生成实体很方便,但对于初学者来说总是会遇到一些问题,在对实体进行增删改的时候,偶尔会出现这个错误, 该异常原因就是因为GRADE表没有主键导致的.EF生成实体模型时,必须保证数据库的表已经设置了主键,否则在进行增删改的过程中会抛异常.如果表没有设置主键,则生成的实体模型中会默认将表中所有不能为空的字段都定义为主键,如下图所示:

C#集合篇,在业务背景下(***产品升级管理):依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量巧用,属性实际运用,唯一性验证

QQ:1187362408 欢迎技术交流和学习 关于系统产品升级报告管理,业务需求: TODO: 1,升级报告管理:依据各县区制定升级报告(关联sAreaCode,给每个地区观看具体升级报告信息) 2,运用的技术:依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量与可null变量巧用,属性实际运用,唯一性验证,url传递中文编码和解码问题 讲解篇:1,服务端aspx,2,服务端后台返回数据(这里采用服务器端程序:aspx.cs)

T4模板_根据DB生成实体类

为了减少重复劳动,可以通过T4读取数据库表结构,生成实体类,用下面的实例测试了一下 1.首先创建一个项目,并添加文本模板: 2.添加 文本模板: 3.向T4文本模板文件添加代码: <#@ template language="C#" debug="True" hostspecific="True" #> <#@ assembly name="System.Data" #> <#@ assembly

NetCore +EF+Mysql 从数据库生成实体类到项目

1.点击“工具”->“NuGet包管理器”->“程序包管理器控制台” 分别安装以下几个包 Mysql 版本: Install-Package MySql.Data.EntityFrameworkCore -Pre Install-Package Pomelo.EntityFrameworkCore.MySql Install-Package Microsoft.EntityFrameworkCore.Tools Install-Package Microsoft.VisualStudio.We

asp.net core3.1 实战开发(EF+Mysql 从数据库生成实体类到项目)

首先在程序包包管理器控制台 中执行以下语句安装依赖包Install-Package MySql.Data.EntityFrameworkCore -PreInstall-Package Pomelo.EntityFrameworkCore.MySqlInstall-Package Microsoft.EntityFrameworkCore.ToolsInstall-Package Microsoft.VisualStudio.Web.CodeGeneration.Design 在程序包包管理器控

asp.net core3.1 实战开发(EF+Sqlserver 从数据库生成实体类到项目)

首先程序包包管理器控制台安装以下包//Install-Package Microsoft.EntityFrameworkCore. Relationl Install-Package Microsoft.EntityFrameworkCoreInstall-Package Microsoft.EntityFrameworkCore.SqlServerInstall-Package Microsoft.EntityFrameworkCore.ToolsInstall-Package Microso