簡體   English   中英

Entity Framework SQLQuery Oracle 指定的方法不受支持

[英]Entity Framework SQLQuery Oracle specified method is not supported

我正在嘗試從 oracle 數據庫表中檢索DbResult列表,下面的代碼通過在實體框架 6 中執行原始 SQL 查詢。

var query = repository.DbContext.Database.SqlQuery<DbResult>("SELECT NAME as Name,SUB_PORTFOLIO_INSTANCE_ID as SubPortfolioInstanceID,STATUS as Status FROM DGARSMART.T_SC_SERVICE");
List<DbResult> serviceList = query.ToList();

此查詢引發異常:

不支持指定的方法。

我認為這是因為查詢試圖將STATUS列(Oracle 中的 number(1,0) 類型)解析為 bool Status 屬性屬於DbResult 如何將該查詢解析為我的DbResult類?

順便說一下,如果我從查詢中刪除STATUS語句,它會檢索數據並成功解析為DbResult對象。

class DbResult
{
   public string Name { get; set; }
   
   public DateTime SubPortfolioInstanceID { get; set; }

   public bool Status { get; set; }

 }

堆棧跟蹤:

   at Oracle.ManagedDataAccess.Client.OracleDataReader.GetBoolean(Int32 i)
   at System.Data.Entity.Core.Objects.Internal.ShapedBufferedDataRecord.ReadBool(DbDataReader reader, Int32 ordinal)
   at System.Data.Entity.Core.Objects.Internal.ShapedBufferedDataRecord.Initialize(DbDataReader reader, DbSpatialDataReader spatialDataReader, Type[] columnTypes, Boolean[] nullableColumns)
   at System.Data.Entity.Core.Objects.Internal.ShapedBufferedDataRecord.Initialize(String providerManifestToken, DbProviderServices providerServices, DbDataReader reader, Type[] columnTypes, Boolean[] nullableColumns)
   at System.Data.Entity.Core.Objects.Internal.BufferedDataReader.Initialize(String providerManifestToken, DbProviderServices providerServices, Type[] columnTypes, Boolean[] nullableColumns)
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryInternal[TElement](String commandText, String entitySetName, ExecutionOptions executionOptions, Object[] parameters)
   at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass24`1.<ExecuteStoreQueryReliably>b__23()
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
   at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass24`1.<ExecuteStoreQueryReliably>b__22()
   at System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute[TResult](Func`1 operation)
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryReliably[TElement](String commandText, String entitySetName, ExecutionOptions executionOptions, Object[] parameters)
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQuery[TElement](String commandText, ExecutionOptions executionOptions, Object[] parameters)
   at System.Data.Entity.Internal.InternalContext.<>c__DisplayClasse`1.<ExecuteSqlQuery>b__d()
   at System.Lazy`1.CreateValue()
   at System.Lazy`1.LazyInitValue()
   at System.Lazy`1.get_Value()
   at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()

我正在使用這些軟件包:

<package id="EntityFramework" version="6.0.0" targetFramework="net45" />
<package id="Oracle.ManagedDataAccess" version="12.2.1100" targetFramework="net45" />
<package id="Oracle.ManagedDataAccess.EntityFramework" version="12.2.20190115" targetFramework="net45" />
 

快速而骯臟的解決方案是使用隱藏的Int32屬性並將其公開為Boolean值。

先看映射私有屬性實體框架代碼實體框架多對多通過包含對象

class DbResult
{
   public string Name { get; set; }

   public DateTime SubPortfolioInstanceID { get; set; }

   [Column("Status")]
   private Int32 HiddenStatus { get; set; }

   public Boolean Status => this.HiddenStatus != 0;

 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM