我有一个具有KeyValuePair类型属性的对象.
I have an object that has a KeyValuePair type property.
我想从数据库中读取一些数据并将结果存储在此KeyValuePair类型字段中.
I would like to read some data from a database and store results in this KeyValuePair type field.
myObject.KeyValuePairs = ctx.ExecuteQuery<KeyValuePair<String, int>> ("Select " + "[" + q.Name + "] As [Key]" + ", Count([" + q.Name + "]) As [Value] From SomeTable" + " Group By [" + q.Name + "]").ToList();myObject.KeyValuePairs 是 List< KeyValuePair< String,int>>
当我尝试读取记录时,出现以下异常:
When I attempt to read the records I get the following exception:
类型"System.Collections.Generic.KeyValuePair`2 [System.String,System.Int32]"必须声明默认的(无参数)构造函数,以便在映射期间进行构造.
The type 'System.Collections.Generic.KeyValuePair`2[System.String,System.Int32]' must declare a default (parameterless) constructor in order to be constructed during mapping.
我在一个类中有一个默认的构造函数,但这不能解决问题.看起来好像它不知道如何构造KeyValuePair对象.它没有默认的构造函数吗?糊涂了.
I have a default constructor in a class, but this is not fixing the problem. It looks as if It doesn't know how to construct a KeyValuePair object. Doesn't it have a default constructor? Confused..
谢谢
推荐答案它确实具有公共的无参数构造函数,因为 KeyValuePair< TKey,TValue> 是一个结构,并且所有结构都具有隐式的公共无参数构造函数.
It does have a public parameterless constructor because KeyValuePair<TKey, TValue> is a struct and all struct have implicit public parameterless constructor.
问题在于EF无法通过反射找到它,因为反射不会返回struct的默认构造函数.
这就是为什么EF报告它找不到它(它无法通过反射找到它).
This is why EF is reporting that it can't find it (it can't find it by reflection).
此外,即使您可以通过反射使用默认构造函数, KeyValuePair< TKey,TValue> 也是不可变的,因此您无法设置 Key 和价值构建后.
Additionally, even if you could use the default constructor by reflection, KeyValuePair<TKey, TValue> is immutable and so you can't set the Key and Value after construction.
要解决您的问题,请定义一个自定义类
To solve your problem, define a custom class
class NameCount { public string Name { get; set; } public int Count { get; set; } }并更改查询以将 Key 作为 Name 返回,并将 Value 作为 Count 返回.我认为您可以为自定义类命名一个更好的名称.
and change your query to return the Key as Name and Value as Count. I assume that you can come up with a better name for your custom class.
更多推荐
KeyValuePair
发布评论