实体框架与存储过程使用定义查询

时间:2012-07-13 10:21:28

标签: entity-framework

我写了一个定义查询

 <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>

但是当我调用存储过程时,它只返回列的一个值

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

此列值重复。

现在我如何获得所有列值?

实际上我的关键字重复性相同。

如果我有像Apple这样的关键字,那么这个关键字会重复,直到循环运行。

1 个答案:

答案 0 :(得分:1)

您已将Year标记为该实体的关键字。键必须在定义查询中的所有记录中唯一,否则它不是键。如果密钥不是唯一的,EF将完全按照您的方式执行 - 它将仅将第一条记录实现为实体,并将其用于所有其他记录。 EF使用密钥来识别实体 - 如果您获得具有相同密钥值的两条记录,则EF认为它是同一个实体!

相关问题