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);

 

posted on 2014-09-06 01:21  Gun 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Gun/p/3958938.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值