2010-12-01 13 views
2

私はまだORMの経験があまりなく、最後のASP.NET Webフォームサイトで友人が2つの計算カラムを含むマッピングファイル(nHibernate用)を作成しました。これら2つの列は、私の '写真'モデルの2つのプロパティにマップされています。Entity Frameworkの計算列?

ASP.NET MVCを使用していますが、同じ小さなWebサイトを再作成していますが、これまでEntity Frameworkを使用していましたが、これと同じことを達成する必要があります。私の '写真'モデルのプロパティは、このフレームワークを使用してそれを行う方法を見ることができません。

ここに、Photoオブジェクトのオリジナルの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> 

それは私が最終的に私は単にDB内の写真の合計数を取得するEntity Frameworkのを(使用して達成しようとしているこのマッピングファイル内の最後の2つのプロパティ(TotalPhotosInMonth & TotalPhotosInYear)ですその月/年の間)。

誰でもEntity Frameworkを使ってこれを行うことができますか?

答えて

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> 

は、エンティティは読み取り専用になりますことを、あなたが挿入、更新を指定し、そのためのストアドプロシージャを削除しない限りますのでご注意ください。