EF Power Tools的Reverse Engineer Code First逆向生成Model时处理计算字段

VS2013上使用EF Power Tools的Reverse Engineer Code First逆向生成Model时,没有处理计算字段。在保存实体时会出现错误。

可以通过修改Mapping.tt解决。

打开Mapping.tt,找到

foreach (var prop in efHost.EntityType.Properties)
    {
        var type = (PrimitiveType)prop.TypeUsage.EdmType;
        var isKey = efHost.EntityType.KeyMembers.Contains(prop);
        var storeProp = efHost.PropertyToColumnMappings[prop];
        var sgpFacet = storeProp.TypeUsage.Facets.SingleOrDefault(f => f.Name == "StoreGeneratedPattern");
        var storeGeneratedPattern = sgpFacet == null
            ? StoreGeneratedPattern.None
            : (StoreGeneratedPattern)sgpFacet.Value;

        var configLines = new List<string>();

        if (type.ClrEquivalentType == typeof(int)
            || type.ClrEquivalentType == typeof(decimal)
            || type.ClrEquivalentType == typeof(short)
            || type.ClrEquivalentType == typeof(long))
        {
            if (isKey && storeGeneratedPattern != StoreGeneratedPattern.Identity)
            {
                configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)");
            }
            else if ((!isKey || efHost.EntityType.KeyMembers.Count > 1) && storeGeneratedPattern == StoreGeneratedPattern.Identity)
            {
                configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)");
            }
        }

在 var configLines = new List<string>(); 后添加计算字段的内容:

foreach (var prop in efHost.EntityType.Properties)
    {
        var type = (PrimitiveType)prop.TypeUsage.EdmType;
        var isKey = efHost.EntityType.KeyMembers.Contains(prop);
        var storeProp = efHost.PropertyToColumnMappings[prop];
        var sgpFacet = storeProp.TypeUsage.Facets.SingleOrDefault(f => f.Name == "StoreGeneratedPattern");
        var storeGeneratedPattern = sgpFacet == null
            ? StoreGeneratedPattern.None
            : (StoreGeneratedPattern)sgpFacet.Value;

        var configLines = new List<string>();

        if(!isKey && storeGeneratedPattern == StoreGeneratedPattern.Computed)
        {
            configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed)");
        }

        if (type.ClrEquivalentType == typeof(int)
            || type.ClrEquivalentType == typeof(decimal)
            || type.ClrEquivalentType == typeof(short)
            || type.ClrEquivalentType == typeof(long))
        {
            if (isKey && storeGeneratedPattern != StoreGeneratedPattern.Identity)
            {
                configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)");
            }
            else if ((!isKey || efHost.EntityType.KeyMembers.Count > 1) && storeGeneratedPattern == StoreGeneratedPattern.Identity)
            {
                configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)");
            }
        }

再次使用Reverse Engineer Code First。

得到带计算字段信息的mapping。

            this.Property(t => t.ResetDate)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);

            this.Property(t => t.ResetHour)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
时间: 2024-12-25 10:46:47

EF Power Tools的Reverse Engineer Code First逆向生成Model时处理计算字段的相关文章

EF Power Tools 数据库逆向生成时T4模板修改

VS2013上使用EF Power Tools的Reverse Engineer Code First逆向生成. 发现数据库中的decimal(18, 4)字段在生成的mapping类中没有精度和小数位数. 这使得通过EF保存数据时,自动生成的SQL缺省使用了decimal(18, 2). 还好EF Power Tools提供了Customize Reverse Engineer Templates ,并给出了它使用的tt文件. 打开它的Mapping.tt 看到 if (type.ClrEqu

ef code first transform,add ef power tools add-in,add tangible t4 editor for enhancement.

use ef power tools, as to .edmx file,right click at view, choose generate database from model, then copy the generated sql text, run the text in database, use ef power tools add in to generate mappings for code first usage.

Installing EF Power Tools into VS2015

TLDR: If you don’t want to do the tasks (even though they are so easy) you can download the updated VSIX I created from here. The Entity Framework Power Tools extension for Visual Studio has been around for quite some time and is still called a Beta.

VS2015安装EF Power Tools

前言 最近在研究EF觉得EF Power Tools比较强大,可以利用其特性来进行Code First模型验证等等,本以为在VS2015扩展和更新中能找到EF Power Tools,结果未找到,还得去官网下载,下面是安装步骤.供需要在VS2015上安装VS Power Tools的园友作一个参考. 第一步 去官网下载,这是链接 EF Power Tools 第二步 将下载的EFPowerTools.vsix扩展名改为zip 第三步 解压压缩文件,如下: 第四步 打开压缩文件中的extensio

1.使用Entity Framwork框架常用的技术手段Code First 和Reverse Engineer Code First

提示:VS版本2013,  Entity Framwork版本5.0.0,Mysql数据库  使用Entity FrameWork的好处就不多说,直接上手如何使用.两种形式:1.将代码映射到数据库实体,使用的是Code First技术.2.将数据库实体转成代码,使用的是Reverse Engineer Code Fist技术. 一.Code First技术 1.建好项目,并加入一个名为CodeFirstDemo控制台应用程序项目. 2.配置.工具>>库程序包管理>>管理解决方案的N

VS2012 安装了NuGet中的EntityFramework项目右键没有 reverse engineer code first

1.首先检查是否已经为项目安装了EntityFramework: 上图应该安装之后的,如果你搜索后发现已经安装,则以步骤可以忽略. 2.由于VS2012中的NuGet没有集成VS关于EntityFramework的工具,因此需要关闭vs2012,下载安装一个工具插件,下载地址如下: http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d/ 3.安装完成后,再次打开vs中相应的项目,点击项

MVC Code First 自动生成数据库时生成的表名会多了一个s

如图:我的类文件都是不带s的 但是生成了的数据库表却是带了s的,如下图: 因为code first默认了就会加上s,解决方法: 在上下文文件中加入这段代码: protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); } 如图所示:

Entity Framework Code-First(23):Entity Framework Power Tools

Entity Framework Power Tools: Entity Framework Power Tools (currently in beta 3) has been released. EF Power Tools is useful mainly in reverse engineering and generating read-only entity data model for code-first. Download and install Power Tools fro

EntityFramework Reverse POCO Code First 生成器

功能强大的(免费)实体框架工具 Julie Lerman 实体框架是开源的,因此开发社区可以在 entityframework.codeplex.com 上共享代码. 但是不要将自己局限在那里寻找工具和扩展. 还有其他一些不错的商业和社区驱动的工具,它们能帮助您使用实体框架取得更大成就. 在本专栏中,我想强调一些来自社区的工具和扩展. 它们是可通过 Visual Studio 库获得的免费 IDE 扩展,或可通过 NuGet 获得的免费代码库. 甚至有一些来自特别项目和官方位外部的实体框架团队的