实体框架中的计算列?

时间:2010-12-01 10:05:17

标签: entity-framework entity-framework-4

我还没有太多使用ORM的经验,在我最后的ASP.NET Web Forms网站上,一位朋友创建了一个包含几个计算列的映射文件(用于nHibernate)。这两列映射到我的'Photo'模型的几个属性。

现在我正在重新创建同一个小网站,虽然使用ASP.NET MVC并且到目前为止已经使用了实体框架,但是,我需要完成同样的事情,将这两个计算列映射到几个属性对于我的“照片”模型,但无法看到如何使用此框架。

以下是我对照片对象的原始nHibernate映射文件的一些内容。

<class xmlns="urn:nhibernate-mapping-2.2" name="Photo" table="Photos">
<id name="Id" unsaved-value="0">
  <column name="PhotoId" />
  <generator class="native" />
</id>
<many-to-one name="Lens" not-null="true">
  <column name="LensId" />
</many-to-one>
<property name="Title" not-null="true">
  <column name="PhotoTitle" />
</property>
<property name="Description" not-null="true">
  <column name="PhotoDescrip" />
</property>
<property name="TotalPhotosInMonth" formula="(SELECT COUNT(p.PhotoId) FROM Photos p WHERE p.DateTimePosted BETWEEN DATEADD(month, DATEDIFF(month, 0, DateTimePosted), 0) AND DATEADD(second, -1, DATEADD(month, DATEDIFF(month, 0, DateTimePosted) + 1, 0)))" />
<property name="TotalPhotosInYear" formula="(SELECT COUNT(p.PhotoId) FROM Photos p WHERE p.DateTimePosted BETWEEN DATEADD(year, DATEDIFF(year, 0, DateTimePosted), 0) AND DATEADD(second, -1, DATEADD(year, DATEDIFF(year, 0, DateTimePosted) + 1, 0)))" />
 </class>

这是我最终尝试使用实体框架完成此映射文件中的最后2个属性(TotalPhotosInMonth&amp; TotalPhotosInYear)(我只想在中检索照片总数)那个月/年的数据库。)

有人可以建议我如何使用Entity Framework来做到这一点吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用DefiningQuery

来完成这项工作
<DefiningQuery>
  SELECT photoid, lensid, phototitle, photodescrip, (SELECT COUNT(p.PhotoId) FROM Photos p WHERE p.DateTimePosted BETWEEN DATEADD(month, DATEDIFF(month, 0, DateTimePosted), 0) AND DATEADD(second, -1, DATEADD(month, DATEDIFF(month, 0, DateTimePosted) + 1, 0))) as totalphotosinmonth, (SELECT COUNT(p.PhotoId) FROM Photos p WHERE p.DateTimePosted BETWEEN DATEADD(year, DATEDIFF(year, 0, DateTimePosted), 0) AND DATEADD(second, -1, DATEADD(year, DATEDIFF(year, 0, DateTimePosted) + 1, 0))) as totalphotosinyear from photos
</DefiningQuery>  

请注意,除非您为其指定插入,更新和删除存储过程,否则该实体将是只读的。