NHibernateの異種コレクションでOfType <>()。Count()を実行するにはどうすればよいですか?
public class Album
{
public virtual string Name { get; set; }
public virtual IEnumerable<Media> { get; set; }
public virtual IEnumerable<Picture>
{
get { return Media.OfType<Picture>(); }
}
public virtual IEnumerable<Video>
{
get { return Media.OfType<Video>(); }
}
public virtual IEnumerable<Audio>
{
get { return Media.OfType<Audio>(); }
}
}
ここで、Media
は抽象基本クラスであり、Picture
、Video
、およびAudio
はMedia
のサブタイプであるため、IEnumerable<Media>
コレクションは異種です。
Album
私はこのような
Album
のDTOを持っています:
public class AlbumDTO
{
public string Name { get; set; }
public int PictureCount { get; set; }
public int VideoCount { get; set; }
public int AudioCount { get; set; }
}
各カウントは<collection>.Count();
を行うことで入力されます。このコードはうまく動作し、各メディアタイプの数がわかりますが、生成されるSQLは理想よりも理想的です。
SELECT * FROM Media WHERE media.Album_id = 1
SELECT * FROM Media WHERE media.Album_id = 2
SELECT * FROM Media where media.Album_id = 3
言い換えれば、まずMedia
をデータベースから取得してからOfType<T>.Count()
を実行します。メモリ内にある。問題は、私がすべてのAlbums
でこれを実行している場合、データベースからMedia
をすべて選択することになり、数千ものレコードになる可能性があります。可能であれば、私はこのようなものを見たいと思っています(私はテーブルごとのマッピングを使用しています):
SELECT COUNT(*) FROM Media WHERE media.Album_id = 1 AND discriminator = 'Picture'
SELECT COUNT(*) FROM Media WHERE media.Album_id = 1 AND discriminator = 'Video'
SELECT COUNT(*) FROM Media WHERE media.Album_id = 1 AND discriminator = 'Note'
誰でもこれを行うためにNHibernateをどのように設定できるか知っていますか?または、正しい動作を得るためにAlbum
エンティティを変更する必要がありますか?
あなたの設定を公開してください。 Fluent Nhibernateを使用していますか? – Aliostad
私は自動化でFluent NHibernateを使用しています。それはちょうどデフォルトの規則を使用しています。 –