Visual studio 2010 Oracle表字段和实体框架之间的转换失败
在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(); }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
是否可以在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
?