linq2db 如何迭代 Fluent Mapping 中的属性?
linq2db how to iterate over Properties in Fluent Mapping?
我正在使用 ORM linq2db。
我们需要在运行时设置列名。
这就是为什么我不能使用 POCO-Class 中的属性而是使用 Fluent Mapping Api 的原因(据我所知没有记录) .
因为列名将在运行时确定,所以我想遍历我的实体中的所有属性并设置 Columnname
.
在 EF Core 3.x 中看起来像这样:
foreach (var property in modelBuilder.Model.GetEntityTypes()
.SelectMany(t => t.GetProperties()))
{
property.SetColumnname(columnNameDict[property.Name]);
}
是否有可能像在 EF Core 中一样遍历模型中的所有属性?
在 linq2db 中设置 属性 的属性我必须使用这样的代码:
builder
.Entity<Addresses>()
.HasTableName("ADDRESSES")
.Property(x => x.Company) // This is the Membergetter, which i can't use in a foreach afaik.
.HasColumnName("TEXT1")
要访问 属性 ID,我必须使用 "x => x.ID"(Expression<Func<Addresses, object>> memberGetter)
,但是当我遍历属性时,我不知道如何 select 正确的 属性 (属性MappingBuilder) 而不使用此表达式 (memberGetter) 或如何在 foreach 中设置此表达式。有没有像这样的字符串重载.Property("Company")
?我没找到。
我用反射试了一下,但是表达式部分没有用;):
foreach (var property in typeof(Addresses).GetProperties())
{
var fieldInfo = adressenInfo.GetFieldByUser(property.Name);
adressenBuilder.Property(a => property.GetValue(a)) // this line doesn't work
.HasColumnName(fieldInfo.LogicalName)
.HasDbType(fieldInfo.DataBaseType);
}
欢迎任何想法!谢谢:)
您需要为 Parameter()
方法手动生成正确的 LambdaExpression。
var param = Expression.Parameter(typeof(Addresses));
adressenBuilder.Property(Expression.Lambda<Func<Addresses, object>>(
Expression.Convert(Expression.Field(param, fieldInfo), typeof(object)),
param))...
我正在使用 ORM linq2db。
我们需要在运行时设置列名。
这就是为什么我不能使用 POCO-Class 中的属性而是使用 Fluent Mapping Api 的原因(据我所知没有记录) .
因为列名将在运行时确定,所以我想遍历我的实体中的所有属性并设置 Columnname
.
在 EF Core 3.x 中看起来像这样:
foreach (var property in modelBuilder.Model.GetEntityTypes()
.SelectMany(t => t.GetProperties()))
{
property.SetColumnname(columnNameDict[property.Name]);
}
是否有可能像在 EF Core 中一样遍历模型中的所有属性?
在 linq2db 中设置 属性 的属性我必须使用这样的代码:
builder
.Entity<Addresses>()
.HasTableName("ADDRESSES")
.Property(x => x.Company) // This is the Membergetter, which i can't use in a foreach afaik.
.HasColumnName("TEXT1")
要访问 属性 ID,我必须使用 "x => x.ID"(Expression<Func<Addresses, object>> memberGetter)
,但是当我遍历属性时,我不知道如何 select 正确的 属性 (属性MappingBuilder) 而不使用此表达式 (memberGetter) 或如何在 foreach 中设置此表达式。有没有像这样的字符串重载.Property("Company")
?我没找到。
我用反射试了一下,但是表达式部分没有用;):
foreach (var property in typeof(Addresses).GetProperties())
{
var fieldInfo = adressenInfo.GetFieldByUser(property.Name);
adressenBuilder.Property(a => property.GetValue(a)) // this line doesn't work
.HasColumnName(fieldInfo.LogicalName)
.HasDbType(fieldInfo.DataBaseType);
}
欢迎任何想法!谢谢:)
您需要为 Parameter()
方法手动生成正确的 LambdaExpression。
var param = Expression.Parameter(typeof(Addresses));
adressenBuilder.Property(Expression.Lambda<Func<Addresses, object>>(
Expression.Convert(Expression.Field(param, fieldInfo), typeof(object)),
param))...