我还没有太多使用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来做到这一点吗?
答案 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>
请注意,除非您为其指定插入,更新和删除存储过程,否则该实体将是只读的。