我有以下方法: –
public ActionResult CustomersDetails(string[] SelectRight) { var selectedCustomers = new SelectedCustomers { Info = SelectRight.Select(GetAccount) }; return View(selectedCustomers); } private AccountDefinition GetAccount(string id) { return entities.AccountDefinition.Find(id); }
但它返回以下错误: –
The type of one of the primary key values did not match the type defined in the entity. See inner exception for details.
在return entities.AccountDefinition.Find(id);线
那是什么导致了这个错误?
内在的例外是: –
System.ArgumentException was unhandled by user code HResult=-2147024809 Message=The type of one of the primary key values did not match the type defined in the entity. See inner exception for details. Parameter name: keyValues Source=EntityFramework ParamName=keyValues StackTrace: at System.Data.Entity.Internal.Linq.InternalSet`1.FindInStore(WrappedEntityKey key,String keyValuesParamName) at System.Data.Entity.Internal.Linq.InternalSet`1.Find(Object[] keyValues) at System.Data.Entity.DbSet`1.Find(Object[] keyValues) InnerException: System.Data.EntitysqlException HResult=-2146232006 Message=The argument types 'Edm.Int64' and 'Edm.String' are incompatible for this operation. Near WHERE predicate,line 1,column 90. Source=System.Data.Entity Column=90 ErrorContext=WHERE predicate,column 90 ErrorDescription=The argument types 'Edm.Int64' and 'Edm.String' are incompatible for this operation. Line=1
解决方法
查看异常消息参数类型’Edm.Int64’和’Edm.String’与此操作不兼容.在WHERE谓词附近,第1行,第90列..
这意味着您的AccountDefinition类的ID是long或Int64,但是您尝试使用字符串查询它.
您需要执行以下操作之一:
>将CustomersDetails(string [] SelectRight)中的string []更改为long [],将GetAccount(字符串id)中的字符串更改为long id
>更改返回实体.AccountDefinition.Find(id);返回entities.AccountDefinition.Find(long.Parse(id));
选项1是更好的选择,但需要更多更改(我建议你这样做),选项2更改较少,但如果id为null或无法解析为long的值,则可能会爆炸.