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 这样的关键字,那么这个关键字会重复,直到循环运行。

4

1 回答 1

1

您已将年份标记为实体的键。键在定义查询的所有记录中必须是唯一的,否则它不是键。如果密钥不是唯一的,EF 将完全按照您的要求执行 - 它只会将第一条记录具体化为实体,并将其用于所有其他记录。EF 使用 key 来识别实体——如果你得到两条 key 值相同的记录,EF 认为它是同一个实体!

于 2012-07-13T11:30:59.857 回答