C# .Name引用的属性或字段不是来自类型
这是映射函数C# .Name引用的属性或字段不是来自类型,c#,linq,cassandra,linq-to-entities,C#,Linq,Cassandra,Linq To Entities,这是映射函数 var mapData = new Map<RxHsLocationStateTbl>().TableName("test"); mapData.Column(c => c.ContinentNameNormalized, cm => cm.WithName(nameof(RxHsLocationStateTbl.ContinentNameNormalized)));
var mapData = new Map<RxHsLocationStateTbl>().TableName("test");
mapData.Column(c => c.ContinentNameNormalized, cm => cm.WithName(nameof(RxHsLocationStateTbl.ContinentNameNormalized)));
return mapData;
var-mapData=new-Map().TableName(“测试”);
mapData.Column(c=>c.columinamenormalized,cm=>cm.WithName(nameof(rxhslocationstattbl.columinamenormalized));
返回地图数据;
如果我以这种方式映射属性,那么一切都会正常工作
但是,如果我试图使这个过程自动化,并尝试自动映射属性,那么我就会得到这个错误
public static Map<T> AutoMap<T>(List<string> exclude) where T : class
{
var tableName = typeof(T).Name.ToLower();
var mapData = new Map<T>().TableName(tableName);
foreach (var p in typeof(T).GetProperties())
{
if (!exclude.Contains(p.Name))
{
mapData.Column( c=> c.GetType().GetProperty(p.Name).Name, cm => cm.WithName(p.Name.ToLower()));
}
}
return mapData;
}
AutoMap<RxHsLocationCityTbl>(new List<string>());
公共静态映射自动映射(列表排除),其中T:class
{
var tableName=typeof(T).Name.ToLower();
var mapData=new Map().TableName(TableName);
foreach(typeof(T).GetProperties()中的var p)
{
如果(!exclude.Contains(p.Name))
{
mapData.Column(c=>c.GetType().GetProperty(p.Name).Name,cm=>cm.WithName(p.Name.ToLower());
}
}
返回地图数据;
}
自动映射(新列表());
错误消息:。该名称引用的属性或字段不是来自
类型
这是此列函数的内部
/// <summary>Defines options for mapping the column specified.</summary>
public Map<TPoco> Column<TProp>(
Expression<Func<TPoco, TProp>> column,
Action<ColumnMap> columnConfig)
{
if (column == null)
throw new ArgumentNullException(nameof (column));
if (columnConfig == null)
throw new ArgumentNullException(nameof (columnConfig));
MemberInfo propertyOrField = this.GetPropertyOrField<TProp>(column);
ColumnMap columnMap;
if (!this._columnMaps.TryGetValue(propertyOrField.Name, out columnMap))
{
Type memberInfoType = propertyOrField as PropertyInfo != (PropertyInfo) null ? ((PropertyInfo) propertyOrField).PropertyType : ((FieldInfo) propertyOrField).FieldType;
columnMap = new ColumnMap(propertyOrField, memberInfoType, true);
this._columnMaps[propertyOrField.Name] = columnMap;
}
columnConfig(columnMap);
return this;
}
///定义用于映射指定列的选项。
公共地图栏(
表达式列,
操作(配置)
{
if(列==null)
抛出新ArgumentNullException(nameof(column));
如果(columnConfig==null)
抛出新ArgumentNullException(nameof(columnConfig));
MemberInfo propertyOrField=此.GetPropertyOrField(列);
柱状图柱状图;
如果(!this._columnMaps.TryGetValue(propertyOrField.Name,out columnMap))
{
类型memberInfoType=propertyOrField作为PropertyInfo!=(PropertyInfo)null?((PropertyInfo)propertyOrField)。PropertyType:((FieldInfo)propertyOrField)。FieldType;
columnMap=新的columnMap(propertyOrField,memberInfoType,true);
此._columnMaps[propertyOrField.Name]=columnMap;
}
columnConfig(columnMap);
归还这个;
}
我不明白。我做错了什么?没有人有解决方案?请确保您的问题包含最小的可重复示例。您是否尝试过不指定列名?驱动程序将按属性名称自动映射列。我不认为那个错误是驱动程序错误,是否存在堆栈异常来提供更多信息?如果你能给我们一个最小的可复制的例子,那会有很大帮助。没有人有解决办法吗?确保你的问题包括一个最小的可复制的例子。你有没有试过不指定列名?驱动程序将按属性名称自动映射列。我不认为那个错误是驱动程序错误,是否存在堆栈异常来提供更多信息?如果你能给我们一个最小的可重复的例子,那会有很大帮助。