2014-03-26 20 views
2

我試圖用「任何」運營商在清風查詢很多表和我得到以下錯誤 - TypeError:無法獲取屬性的值'isAnonymous':對象爲空或未定義Breeze.js - 收到錯誤嘗試使用「任何」運營商 - 錯誤:無法獲得屬性「isAnonymous」的值:對象爲空或未定義

唯一的stackoverflow問題,我可以找到似乎相關的是這一個,但沒有解決isAnonymous問題,因爲海報沒有提供更多的代碼:

breeze projection : error selecting non scalar navigation properties

我一個米用微風1.4.11與 實體框架5

我試圖運行查詢是

var getEntities = function (entitiesObservable) { 
    var whereClause = ""; 

    whereClause = Predicate.create("t_entity_nm", "any", "frst_nm", "startsWith", "Frank"); 

    var query = EntityQuery.from("Entities") 
          .where(whereClause) 
          .expand("t_entity_nm"); 

    $('#loading-indicator').show(); 
    return manager.executeQuery(query) 
        .then(querySucceeded) 
        .fail(queryFailed); 

    function querySucceeded(data) { 
     $('#loading-indicator').hide(); 
     if (entitiesObservable) { 
      entitiesObservable(data.results); 
     } 
     log("Retrieved [Entities] from remote data source", data, true); 
    } 
}; 

t_entity加入到t_entity_nmentity_sys_key_id ...他們的意見......這裏的視圖定義

CREATE VIEW [dbo].[t_entity] 
( [entity_sys_key_id] 
    , [pers_flag] 
    , [dob_dt] 
    , [birth_plc] 
    , [sin] 
    , [hsn] 
    , [drv_lcnc_num] 
    , [ap_vndr_num] 
    , [ar_cstmr_num] 
    , [sec_grp_sys_key_id] 
    , [actv_flag] 
    , [log_eff_dt] 
    , [log_can_dt] 
    , [log_upd_by] 
    , [sys_del_flag] 
    , [sys_ts] 
) 
AS 
SELECT 
     [entity_sys_key_id] 
    , [pers_flag] 
    , [dob_dt] 
    , [birth_plc] 
    , [sin] 
    , [hsn] 
    , [drv_lcnc_num] 
    , [ap_vndr_num] 
    , [ar_cstmr_num] 
    , [sec_grp_sys_key_id] 
    , [actv_flag] 
    , [log_eff_dt] 
    , [log_can_dt] 
    , [log_upd_by] 
    , [sys_del_flag] 
    , [sys_ts] 
FROM [CMN_DEV].[dbo].[t_entity] 

CREATE VIEW [dbo].[t_entity_nm] 
(
     [entity_nm_sys_key_id] 
    , [entity_sys_key_id] 
    , [entity_nm_typ_cd] 
    , [saltn_cd] 
    , [frst_nm] 
    , [mid_nm] 
    , [last_nm] 
    , [firm_nm] 
    , [nysiis_key] 
    , [prmy_flag] 
    , [sec_grp_sys_key_id] 
    , [log_eff_dt] 
    , [log_can_dt] 
    , [log_upd_by] 
    , [sys_del_flag] 
    , [sys_ts] 
) 
AS 
SELECT 
     [entity_nm_sys_key_id] 
    , [entity_sys_key_id] 
    , [entity_nm_typ_cd] 
    , [saltn_cd] 
    , [frst_nm] 
    , [mid_nm] 
    , [last_nm] 
    , [firm_nm] 
    , [nysiis_key] 
    , [prmy_flag] 
    , [sec_grp_sys_key_id] 
    , [log_eff_dt] 
    , [log_can_dt] 
    , [log_upd_by] 
    , [sys_del_flag] 
    , [sys_ts] 
FROM [CMN_DEV].[dbo].[t_entity_nm] 

微風控制器看起來是這樣的:

namespace MarketingPromotions.Controllers 
{ 
    [BreezeController(MaxAnyAllExpressionDepth = 2)] 
    public class BreezeController : ApiController 
    { 

    readonly EFContextProvider<OASIS_DEVEntities> _contextProvider = 
      new EFContextProvider<OASIS_DEVEntities>(); 

     [HttpGet] 
     public string Metadata() 
     { 
      return _contextProvider.Metadata(); 
     } 
     #endregion 

     [HttpGet] 
     public IQueryable<t_entity> Entities() 
     { 
      return _contextProvider.Context.t_entity; 
     } 

     [HttpGet] 
     public IQueryable<t_entity_nm> EntityNames() 
     { 
      return _contextProvider.Context.t_entity_nm; 
     } 
} 

的代碼在那裏斷裂是在上線breeze.debug.js - >

if (entityType.isAnonymous) return; 

其中「這個」是在從breeze.debug.js下面的代碼段的frst_nm字段:

proto._validate = function(entityType) { 
     // will throw if not found; 
     if (this.isValidated) return;    
     this.isValidated = true; 
     if (this.propertyPath) { 
      if (entityType.isAnonymous) return; 
      var prop = entityType.getProperty(this.propertyPath, true); 
      if (!prop) { 
       var msg = __formatString("Unable to resolve propertyPath. EntityType: '%1' PropertyPath: '%2'", entityType.name, this.propertyPath); 
       throw new Error(msg); 
      } 
      if (prop.isDataProperty) { 
       this.dataType = prop.dataType; 
      } else { 
       this.dataType = prop.entityType; 
      } 
     } else if (this.fnNodes) { 
      this.fnNodes.forEach(function(node) { 
       node._validate(entityType); 
      }); 
     } 
    }; 
+0

你試過執行你的查詢,(因爲它應該被翻譯),直接對EF來確定查詢本身是否工作。 –

+0

我想這對你的建議和它的工作[HTTPGET] 公衆的IQueryable EntitiesByName(){ System.Data.Entity.Infrastructure.DbQuery 查詢= _contextProvider.Context.t_entity; query = query.Include(「t_entity_nm」); return query.Where(e => e.t_entity_nm.Any(en => en.frst_nm.StartsWith(「Frank」))); }然後我看到了關於資源名稱/實體類型映射的其他評論,並且修復了它。 – user3461612

+0

你能將問題標記爲已回答嗎? (所以我可以把這個從我的名單:) –

回答

1

這看起來像資源名稱問題。我的猜測是,你還沒有建立資源名稱/實體類型映射。

在這些鏈接看看:

http://www.breezejs.com/documentation/query-result-debugging

http://www.breezejs.com/sites/all/apidocs/classes/MetadataStore.html#method_setEntityTypeForResourceName

這一個:http://www.breezejs.com/documentation/querying-locally 副標題下:資源名稱不的EntityType名稱

+0

資源名稱不是EntityType名稱正是我的問題。在我的情況下的資源是實體和實體類型是t_entity 當我添加到查詢的類型(「t_entity」),它的作品 var query = EntityQuery。from(「Entities」).toType(「t_entity」) .where(whereClause) .expand(「t_entity_nm」); 我打算嘗試在元數據存儲中設置實體類型 var metadataStore = manager.metadataStore; metadataStore.setEntityTypeForResourceName('Speakers','Person'); 在我的情況下 metadataStore.setEntityTypeForResourceName('Entities','t_entity'); 謝謝! – user3461612

+0

我最終創建了一個函數 'function mapEntityTypesToResourceNames(){ var store = datacontext.manager.metadataStore; store.setEntityTypeForResourceName('Entities','t_entity'); }'我在shell.js中調用的' (引用方法中使用了熱毛巾),這是在primeData允諾在activate方法返回後調用的方法.'function activate(){ return datacontext.primeData () 。然後(引導) .fail(failedInitialization); return boot(); }' – user3461612

+0

我們已經考慮制定一個標準選項。您可以在用戶語音上投票 – Ward

相關問題