2012-07-13 85 views
1

存儲過程中我寫了自定義實體定義查詢實體框架使用定義查詢

<EntitySet Name="EntityFramework" EntityType="SEOAnalysisModel.Store.EntityFramework"> 
    <DefiningQuery> 
     SELECT Keyword, ResultHead ,Year from SeoAnalysis where Year = 2005 
    </DefiningQuery> 
</EntitySet> 

而且實體類型

<EntityType Name="EntityFramework"> 
    <Key> 
     <PropertyRef Name="Year" /> 
    </Key> 
    <Property Name="Year" Nullable="false" Type="int" /> 
    <Property Name="Keyword" Nullable="false" MaxLength="1000" Type="varchar" /> 
    <Property Name="ResultHead" Nullable="false" MaxLength="2000" Type="varchar" /> 
</EntityType> 

但是,當我調用存儲過程,它返回的只有1個值列

// Stored procedure 
public void SelectValue() { 
    using (MyConnection ctx = new MyConnection()) { 
     foreach (var p in ctx.EntityFramework(2005)) { 
      Response.Write(p.Keyword); 
     } 
    } 
} 

而這個列值是重複的。

現在我該如何獲得所有列值?

其實我得到同樣的關鍵字重複。

如果我有像Apple這樣的關鍵字,那麼此關鍵字會重複,直到循環運行。

回答

1

您已將Year標記爲實體的關鍵字。在您的定義查詢的所有記錄中,鍵必須是唯一的,否則它不是關鍵。如果密鑰不是唯一的,那麼EF將完全按照你所得到的 - 它只將第一條記錄物化爲實體,並將其用於所有其他記錄。 EF使用密鑰來標識實體 - 如果您獲得兩個具有相同密鑰值的記錄,則EF認爲它是相同的實體!