zoukankan      html  css  js  c++  java
  • 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.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)");
                }
            }    

    果然对decimal没处理精度。

    加上以下代码:

    if(type.ClrEquivalentType == typeof(decimal))
                {
                    //foreach (var f in prop.TypeUsage.Facets)
                    //{
                    //    var scale = (Facet)f;
                    //    WriteLine("//Name:" + scale.Name );
                    //}
                    var scale = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "Scale");
                    var precision = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "Precision");
                    configLines.Add(string.Format(".HasPrecision({0},{1})",precision.Value, scale.Value));
                }

    再次使用Reverse Engineer Code First。

    得到带精度的mapping。

                this.Property(t => t.d0)
                    .HasPrecision(18,0);
    
                this.Property(t => t.d2)
                    .HasPrecision(18,2);
    
                this.Property(t => t.d4)
                    .HasPrecision(18,4);
  • 相关阅读:
    java.utils.HashMap数据结构分析(转)
    oracle什么时候须要commit
    CreateFont具体解释
    Java工厂模式
    簡單SQL存儲過程實例
    Cocos2d-x 3.0新引擎文件夹结构
    设计模式之十 适配器模式
    腰围2尺1,2,3,4,5,6,7,8寸各自等于是多少厘米/英寸(对比表)
    iOS 基础函数解析
    内部元素一一相应的集合的算法优化,从list到hashmap
  • 原文地址:https://www.cnblogs.com/Gun/p/3958938.html
Copyright © 2011-2022 走看看