我正在使用实体框架代码优先创建数据库表。我的模型类有十个小数字段。目前我正在像这样设置字段属性OnModelCreating
method:
modelBuilder.Entity<Envelopes>().Property(p => p.cell_1_1).HasPrecision(18, 2);
由于我有十个字段,我正在考虑使用for
循环来设置此精度属性,例如以下代码:
for( int i = 1; i <= 10; i++ ) {
modelBuilder.Entity<Envelopes>()
.Property(p => p.Equals("cell_1_"+i ))
.HasPrecision(18, 2);
}
然而上面的代码给了我一个语法错误。
精度值可以这样设置吗?
这应该适合你 - 使用反射来获取类型的所有属性decimal
在您的实体中,然后构建属性访问的表达式树,最后使用属性访问 lambda 将精度设置为所需的值。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var properties = typeof(Envelopes).GetProperties()
.Where(p => p.PropertyType == typeof(decimal));
foreach (var property in properties)
{
var lambda = BuildLambda<Envelopes, decimal>(property);
modelBuilder.Entity<Envelopes>()
.Property(lambda)
.HasPrecision(18, 2);
}
}
static Expression<Func<T, U>> BuildLambda<T,U>(PropertyInfo property)
{
var param = Expression.Parameter(typeof(T), "p");
MemberExpression memberExpression = Expression.Property(param, property);
var lambda = Expression.Lambda<Func<T, U>>(memberExpression, param);
return lambda;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)