我正在尝试在C#中实现Entity Framework,以便将数据从Web服务移动到SQL Server 2008 R2数据库中。似乎一切都在游泳,直到我真的试图运行这件事。该模型将数据库中的varchar(50)字段作为字符串字段读取,这很好,因为这是从Web服务中下载的相同字段的方式。但是,该字段中包含的实际数据是一个7位数字ID,因此当我尝试这样做时:
EntityKey key = new EntityKey("DatabaseEntity.Citations", "ID", idNum);
Citation dbrecord = (Citation)CitationDB.GetObjectByKey(key);
我收到以下错误:
Exception occurred: The type of the key field 'ID' is expected to be 'System.
String', but the value provided is actually of type 'System.Int32'.
Parameter name: key
at System.Data.EntityKey.ValidateTypeOfKeyValue(MetadataWorkspace workspace,
EdmMember keyMember, Object keyValue, Boolean isArgumentException,
String argumentName)
at System.Data.EntityKey.ValidateEntityKey(MetadataWorkspace workspace,
EntitySet entitySet, Boolean isArgumentException, String argumentName)
at System.Data.Objects.ObjectContext.TryGetObjectByKey(EntityKey key, Object&
value)
at System.Data.Objects.ObjectContext.GetObjectByKey(EntityKey key)
at MyLibrary.MyClass.FindSpecificRecordsByState(String username,
String[] states)...
我尝试将模型中的类型更改为Int32,并将Web服务记录中的字符串转换为Int32,但程序集在此时停止编译并给了我一大堆错误。
我能做些什么来解决这个问题吗? ID字段是主键,由于这些字段的数据质量不可靠,我无法确定任何其他字段是否可用作密钥。
答案 0 :(得分:0)
显然,类型'string'不会阻止Entity确定它实际上是一个不同的类型。同事建议在idNum值(类型为字符串,而不是String类型)周围添加Convert.ToString(),现在它可以正常工作。