Entity Framework Code First反向生成代码

那些年我们生成的代码

早年,笨点的方法通常都是使用DbFirst先生成cs,然后把CS复制出来做些修改

后台基本上就自己使用T4来写,但是一直也没时间完善成通用的版本

MS官方 提供了EntityFramework PowerTools不过实在太难用

第三方的一些生成器也有好用的,不过因为持续集成的需要,所以比较少用

EntityFramework Reverse POCO Code First Generator

好吧,本文正题是推荐EntityFramework Reverse POCO Code First Generator

可以通过"扩展和更新"来安装此插件

然后对于想反向生成的项目需要做的有3件事

1.通过Nuget引用EntityFramework

2.添加一个连接字符串到App.Config或Web.Config中

3.新建项,选择"EntityFramework Reverse POCO Code First Generator"

4.生成完成

EntityFramework Reverse POCO Code First Generator的配置

EntityFramework Reverse POCO Code First Generator还是比较容易配置的,打开对应的t4文件,里面对应的就是一些配置

<#// Please make changes to the settings below.
// All you have to do is save this file, and the output file(s) is/are generated. Compiling does not regenerate the file(s).
// Misc settings **********************************************************************************************************************
// Namespace = ""; // Override the default namespace here
DbContextName = "DataStatContext";
ConnectionStringName = "MyDbContext"; // DbContext名称
ConfigurationClassName = "Configuration"; // Configuration映射文件名
ConfigFilenameSearchOrder = new[] { "app.config", "web.config", "app.config.transform", "web.config.transform" }; // Add more here if required. The config files are searched for in the local project first, then the whole solution second.
MakeClassesPartial = true;//生成partial class
GenerateSeparateFiles = true;//生成多文件
UseCamelCase = true; // This will rename the tables & fields to use CamelCase. If false table & field names will be left alone.
IncludeComments = true; // 包含注释
IncludeExtendedPropertyComments = ExtendedPropertyCommentsStyle.AtEndOfField; //注释位置
IncludeViews = false;//包含视图
DisableGeographyTypes = false; //是否使用 System.Data.Entity.Spatial.DbGeometry 类型,Odata不支持此类型
CollectionType = "List"; // Determines the type of collection for the Navigation Properties. "ObservableCollection" for example
CollectionTypeNamespace = ""; // "System.Collections.ObjectModel" is required if setting the CollectionType = "ObservableCollection"
AddUnitTestingDbContext = false; //是否提供单元测试Mock 类型FakeDbContext 及FakeDbSet

Inflector.PluralizationService = new EnglishPluralizationService();

//生成的元素包括

ElementsToGenerate = Elements.Poco | Elements.Context | Elements.UnitOfWork | Elements.PocoConfiguration;
// 各种命名空间
PocoNamespace = "";
ContextNamespace = "";
UnitOfWorkNamespace = "";
PocoConfigurationNamespace = "";
// Schema *****************************************************************************************************************************
// If there are multiple schema, then the table name is prefixed with the schema, except for dbo.
// Ie. dbo.hello will be Hello.
// abc.hello will be AbcHello.
// To only include a single schema, specify it below.
SchemaName = null;
PrependSchemaName = true; // Control if the schema name is prepended to the table name

// 黑名单或白名单
TableFilterExclude = new Regex("sysdiagrams");
TableFilterInclude = null;

//重命名规则*********************************************************************************************************************
// Use the following function to rename tables such as tblOrders to Orders, Shipments_AB to Shipments, etc.
// Example:
/*TableRename = (name, schema) =>
{
if (name.StartsWith("tbl"))
name = name.Remove(0, 3);
return name.Replace("_AB", "");
};*/
TableRename = (name, schema) => name; // Do nothing by default

// WCF ********************************************************************************************************************************
// This is only intended as a helper, to get you started creating WCF contracts, and to save a lot of typing.
AddWcfDataAttributes = false;
ExtraWcfDataContractAttributes = ""; // This string is inserted into the [DataContract] attribute, before the closing square bracket.

// Example: ""; = [DataContract]
// "(Namespace = \"http://www.contoso.com\")"; = [DataContract(Namespace = "http://www.contoso.com")]
// "(Namespace = Constants.ServiceNamespace)"; = [DataContract(Namespace = Constants.ServiceNamespace)]
// Callbacks **********************************************************************************************************************
// This method will be called right before we write the POCO header.
Action<Table> WritePocoClassAttributes = t =>
{
// Do nothing by default
// Example:
// if(t.ClassName.StartsWith("Order"))
// WriteLine(" [SomeAttribute]");
};

// Writes optional base classes
Func<Table, string> WritePocoBaseClasses = null; // t => "IMyBaseClass";

// Writes any boilerplate stuff
Action<Table> WritePocoBaseClassBody = t =>
{
// Do nothing by default
// Example:
// WriteLine(" // " + t.ClassName);
};

   Func<Column, string> WritePocoColumn = c => c.Entity;
// That's it, nothing else to configure ***********************************************************************************************
// Read schema
var tables = LoadTables();
// Generate output
if (tables.Count > 0)
{
#>
<#@ include file="EF.Reverse.POCO.ttinclude" #>
<# } #>

 

   

  引用:

https://efreversepoco.codeplex.com/

   

   

时间: 2024-10-22 15:02:48

Entity Framework Code First反向生成代码的相关文章

MySQL &amp;amp; Entity Framework Code First 数据表大小写的问

以前都是使用Linux平台下的MySQL,现在为了调试方便,在开发机上安装了MySQL的Windows版本5.6.10,在使用Entity Framework Code First生成数据库对象时,发现所有的数据表的表名都变成了小写字符,而字段的名称是混合大小写的,这个问题在Linux平台上没有出现过,于是着手弄明白这是肿么一回事. 经过网上搜索,找到这篇文章: Entity Framework with mysql, Table Capitalization issue between lin

计算机-entity framework code first连接多数据库的问题

问题描述 entity framework code first连接多数据库的问题 求帮忙,我现在用来自数据库的code first方式连接数据库A,一切正常. 现在想要连接到数据库B,数据库A的表在B中全部都有,结构也都一样,B数据库有很多其他表. 现在的问题是我只修改config里的connectionStrings配置,程序会报" 具有固定名称"MySql.Data.EntityClient"的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册或无法加载&qu

Entity Framework 5.0系列之自动生成Code First代码

在前面的文章中我们提到Entity Framework的"Code First"模式也同样可以基于现有数据库进行开发.今天就让我们一起看一下使用Entity Framework Power Tools如何基于现有数据库生成数据类和数据库上下等. Entity Framework Power Tools 基于现有数据库生成POCO数据类和数据库上下文需要借助Visual Studio一个扩展插件-- Entity Framework Power Tools(一个Code First反向工

学习Entity Framework 中的Code First

这是上周就写好的文章是在公司浩哥的建议下写的本来是部门里面分享求创新用的这里贴出来分享给大家.   最近在对MVC的学习过程中接触到了Code First这种新的设计模式感觉很新颖并且也体验到了这种方式所带来的便利.这里将我的一些理解分享出来. 需要了解的概念 POCO POCOPlain Old CLR Object的概念是从java的POJO借用而来而两者的含义是一致的不同的仅仅是使用的语言不一样.所以POCO的解释就是"Plain Old C# Object".POJO的内在含义

Oracle中使用Entity Framework 6.x Code-First方式开发

去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下Oracle官网,发现EF6.X已经支持了,并且给出了二篇教程(英文版): 1.Using NuGet to Install and Configure Oracle Data Provider for .NET 2.Entity Framework Code First and Code First Migrations for Oracle Database 基本上照着做就行了,为了方

vs2013装entity framework,参数错误

问题描述 vs2013装entity framework,参数错误 生成 Entity Framework Code First 提示 参数错误 hresult e_invalidarg 求帮助 解决方案 应该是你的安装配置的问题,最好不要用中文版的VS,一些插件,原作者不会去测试和中文版的兼容性,就算微软自己的软件,和中文版的兼容性的问题也经常出现.

Entity Framework 自动生成CodeFirst代码

原文:Entity Framework 自动生成CodeFirst代码 前言 在前面的文章中我们提到Entity Framework的"Code First"模式也同样可以基于现有数据库进行开发.今天就让我们一起看一下使用Entity Framework Power Tools如何基于现有数据库生成数据类和数据库上下等. Entity Framework Power Tools 基于现有数据库生成POCO数据类和数据库上下文需要借助Visual Studio一个扩展插件-- Entit

使用NuGet助您玩转代码生成数据:Entity Framework 之Code First

在Code First中,编写完代码并运行之后,我们的Model会同步到Db中,但是往往我们 需要的是编写完Model就生成数据库,而不是等UI部分完成并运行之后才看到数据库,借助NuGet程序包管理器 可以让我们即时完成Code=>DB. 准备:1.本人开发工具为VS2012,使用的是.NET Framework 4.5 (EF5): 2.然后确保已在VS扩展中安装了最新的"NuGet程序包管理器": 3.常用的三行 NuGet用于EF命令(当然可以直接用命令"get

Entity Framework 5.0系列之Code First数据库迁移

我们知道无论是"Database First"还是"Model First"当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Code First如何更新已有的模型呢?今天我们简单介绍一下Entity Framework的数据迁移功能. Entity Framework配置 在开始今天的话题之前先来看一下Entity Framework的配置,因为有很多朋友因为配置文件的问题造成"Migrations"命令执行失败.