1

在WCF Web服務中,我在ORACLE 11g數據庫上進行查詢,並使用實體框架作爲模型。目標字段的類型是Numeric,而實體框架是Int64。在Oracle表字段和實體框架之間失敗

當我嘗試更新該字段時,出現以下異常:從物化「System.Decimal」類型到「System.Int64」類型的指定轉換無效。 生成錯誤的方法如下,特別是else語句中的行:result = _context.ExecuteStoreQuery(query).FirstOrDefault();

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

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

    return result.ToString(); 
} 

是否可以在EF級別定義轉換器或類似的東西?更改數據庫的選項不可行,因此我必須編輯代碼。

+0

您可以在EF模型中將數據類型更改爲「decimal」嗎? – 2012-07-20 10:30:36

回答

1

在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(); 
} 

這樣,通過timestampFieldType是十進制類型,並選擇合適的演員。此問題是由於Oracle數據庫(舊數據庫)中用於類似字段的不同數據類型(如示例更新字段)所致。