Visual studio 2010 Oracle表字段和实体框架之间的转换失败

Visual studio 2010 Oracle表字段和实体框架之间的转换失败,visual-studio-2010,wcf,entity-framework-4,casting,oracle11g,Visual Studio 2010,Wcf,Entity Framework 4,Casting,Oracle11g,在WCFWeb服务中,我对Oracle11g数据库进行查询,并使用实体框架作为模型。目标字段的类型为Numeric,而实体框架中的类型为Int64 当我尝试更新字段时,出现以下异常:指定的从物化的“System.Decimal”类型转换为“System.Int64”类型的转换无效。 下面是生成错误的方法,特别是对于else语句中的行:result=\u context.ExecuteStoreQuery(query.FirstOrDefault() 公共字符串GetDatabaseTimesta

在WCFWeb服务中,我对Oracle11g数据库进行查询,并使用实体框架作为模型。目标字段的类型为Numeric,而实体框架中的类型为Int64

当我尝试更新字段时,出现以下异常:指定的从物化的“System.Decimal”类型转换为“System.Int64”类型的转换无效。 下面是生成错误的方法,特别是对于else语句中的行:result=\u context.ExecuteStoreQuery(query.FirstOrDefault()

公共字符串GetDatabaseTimestamp(类型timestampFieldType,字符串查询) { 客观结果; if(timestampFieldType==typeof(string)) { 结果=_context.ExecuteStoreQuery(查询).FirstOrDefault(); } 其他的 { 结果=_context.ExecuteStoreQuery(查询).FirstOrDefault(); } 返回result.ToString(); }
是否可以在EF级别定义转换器或类似的东西?更改数据库的选项不可行,因此我必须编辑代码。

在EF中,我已将类型更改为十进制。问题是查询是直接在Oracle数据库上执行的,这会生成异常

我通过使用目标实体的属性解决了这个问题,并将方法更改为:

public string GetDatabaseTimestamp(Type timestampFieldType, string query) 
{ 
 object result; 

if (timestampFieldType == typeof(string)) 
{ 
  result = _context.ExecuteStoreQuery<string>(query).FirstOrDefault(); 
} 
else if (timestampFieldType == typeof(decimal)) 
{ 
  result = _context.ExecuteStoreQuery<decimal>(query).FirstOrDefault(); 
} 
else 
{  
  result = _context.ExecuteStoreQuery<long>(query).FirstOrDefault(); 
} 

return result.ToString(); 
} 
公共字符串GetDatabaseTimestamp(类型timestampFieldType,字符串查询) { 客观结果; if(timestampFieldType==typeof(string)) { 结果=_context.ExecuteStoreQuery(查询).FirstOrDefault(); } else if(timestampFieldType==typeof(十进制)) { 结果=_context.ExecuteStoreQuery(查询).FirstOrDefault(); } 其他的 { 结果=_context.ExecuteStoreQuery(查询).FirstOrDefault(); } 返回result.ToString(); }
通过这种方式,传递的timestampFieldType是decimal类型,并且选择了正确的强制转换。此问题是由于Oracle DB(遗留数据库)中类似字段(例如更新字段)使用的数据类型不同造成的。

在EF中,我已将类型更改为十进制。问题是查询是直接在Oracle数据库上执行的,这会生成异常

我通过使用目标实体的属性解决了这个问题,并将方法更改为:

public string GetDatabaseTimestamp(Type timestampFieldType, string query) 
{ 
 object result; 

if (timestampFieldType == typeof(string)) 
{ 
  result = _context.ExecuteStoreQuery<string>(query).FirstOrDefault(); 
} 
else if (timestampFieldType == typeof(decimal)) 
{ 
  result = _context.ExecuteStoreQuery<decimal>(query).FirstOrDefault(); 
} 
else 
{  
  result = _context.ExecuteStoreQuery<long>(query).FirstOrDefault(); 
} 

return result.ToString(); 
} 
公共字符串GetDatabaseTimestamp(类型timestampFieldType,字符串查询) { 客观结果; if(timestampFieldType==typeof(string)) { 结果=_context.ExecuteStoreQuery(查询).FirstOrDefault(); } else if(timestampFieldType==typeof(十进制)) { 结果=_context.ExecuteStoreQuery(查询).FirstOrDefault(); } 其他的 { 结果=_context.ExecuteStoreQuery(查询).FirstOrDefault(); } 返回result.ToString(); }
通过这种方式,传递的timestampFieldType是decimal类型,并且选择了正确的强制转换。此问题是由于Oracle DB(旧数据库)中类似字段(例如更新字段)使用了不同的数据类型造成的。

能否在EF模型中将数据类型更改为
decimal
?能否在EF模型中将数据类型更改为
decimal