2013-07-08 73 views
0

我有我所有的正常微風查詢和更新工作非常完美,它現在非常光滑,我已經習慣了它!如何從特定的web api調用返回微風實體?

我當然想要很困難,但使用微風來加載實際上不是查詢結果的實體。或者至少不是直接。

基本上我有另一個對象,使用我的實體類來找到某些匹配對象。這個邏輯並不重要。結果是,調用該對象上的方法將返回IEnumerable<MyObject>(實際上是IList<MyObject>),然後我想返回到客戶端使用微風。所以我想這是一個查詢,只是其他事情正在做查詢邏輯,而不是微風傳遞它的where和orderby子句。

然而此刻,我剛剛從微風Object #<Object> has no method 'getProperty'

得到錯誤只是爲了解釋:我已經嘗試實現這個:

第一次嘗試:

[HttpGet] 
public object SchemasForStatementFile(int fileId) 
{ 
    StatementFile statementFile = _contextProvider.Context.Statements.SingleOrDefault(x => x.Id == fileId); 
    IEnumerable<StatementFileSchema> schemasForFile = _parsingEngine.FindSchemasForFile(statementFile); 
    return new { schemas = schemasForFile.ToArray() }; 
} 

第二次嘗試:

[HttpGet] 
public IQueryable<StatementFileSchema> SchemasForStatementFile(int fileId) 
{ 
    StatementFile statementFile = _contextProvider.Context.Statements.SingleOrDefault(x => x.Id == fileId); 
    IEnumerable<StatementFileSchema> schemasForFile = _parsingEngine.FindSchemasForFile(statementFile); 
    return schemasForFile.AsQueryable(); 
} 

我得到同樣的錯誤與任何一種方法。

回答

1

好問題!

這正是JsonResultsAdapter的用例。查看源代碼中的Edmunds示例或「默認」JsonResultsAdapter。這個想法是,JsonResultsAdapter將獲取查詢的結果並且規定它包含的'entityTypes'。如果需要,它也可以變形數據。欲瞭解更多信息,請看這裏:General discussion of the JsonResultsAdapter和這裏JsonResultsAdapter api

+0

好的謝謝澄清。我已經閱讀了JsonResultsAdapter頁面,但我已經將其解釋爲更抽象的結果所需的東西。我的意思是,我從服務器端返回微風通常會返回的相同實體,只是按照我想要的方式進行過濾和組織。不是說我抱怨你們所做的所有令人敬畏的工作,但我有點兒預期的微風只是知道如何閱讀這些結果。這是不可思議的山谷效應 - 微風變得越來越完美,當我真的需要做一些工作時,它就越奇怪! ;) – Adam

+0

實際上,只要你使用默認的Json.net序列化器及其默認設置,那麼每個實體的屬性之一就是'$ type'。只要這與Breeze已知的其中一種類型相匹配,Breeze就會將數據轉換爲「真實」實體。 –

+0

這就是我期待的結果,原因是我的實體沒有被自動映射 - 它們不是被返回的真實實體,而是EF代理對象。因此,就像我平常的問題一樣,你的回答可以澄清微風的行爲,並指出我的愚蠢代碼在哪裏使你的魔法框架陷入困境:) – Adam