2012-10-18 25 views
0

我可以使用下面的代碼行創建一個查詢,僅返回「ActivityEntity」類型的對象....實體SQL VS的createQuery其中一個工程和其他錯誤進行相同的查詢

var q = CreateObjectSet<EntityBase>("EntityBases").OfType<ActivityEntity>() 

。並按預期方式運行查詢。但我想真正創建使用實體SQL語法查詢,因此試圖對上述轉換爲下面的代碼...

string query = "SELECT it FROM OFTYPE(MyContext.EntityBases, MyNamespace.ActivityEntity) AS it"; 
var q = context.CreateQuery<DbDataRecord>(query.ToString(), new ObjectParameter[] { }); 

......除了這提供了以下錯誤......

無法找到類型'MyNamespace.ActivityEntity'。確保所需的 架構已加載,並且名稱空間已正確導入。

...這兩組代碼都在同一個C#文件中,所以沒有辦法,因爲強類型的代碼工作得很好,所以命名空間沒有問題。任何想法如何解決這個問題?

注:

不知道這是否有差別,但實體框架是建立與無的代碼生成策略,然後我建立我自己的類使用。但是我用EdmEntityTypeAttribute屬性標記了它們。

+0

這是同一個項目還是有不同的項目?你用EdmEntityType屬性修飾你的實體,但是你把EdmSchemaAttribute添加到你的程序集中了嗎?如果不是EdmEntityType屬性將被忽略。 – Pawel

回答

0

解決方案證明我需要確保在生成實體SQL之前已經使用了CreateObjectSet。因此,在創建實體SQL之前,我使用下面的代碼...

var q = CreateObjectSet<EntityBase>("EntityBases").OfType<ActivityEntity>(); 

但從未實際使用生成的「q」。只要使用這一行,就可以確保實體框架上下文知道EntityBases集合及其派生類型的存在。

相關問題