2011-02-07 8 views
1

私のWebアプリケーションは半ダースのテーブルを使います。それぞれのテーブルは、ユーザーがシステムを通過するときに読み込まれます。統計分析を行うために、私はデータベースビューを作成して、これらのテーブルを単一のビューにまとめました。Fluent NHibernateを使用してビューにアクセスするにはどうすればよいですか?

ビューは機能していますが、ビューの作成に関するいくつかのテストを自動化したいと思います。

これを行うための私の考えは、リストアクションのみで、ビューのモデル/マップとリポジトリを作成することでした。私の現在の実装は機能しません。

これは私のリポジトリである:

namespace FunctionalTests.SpssView 
{ 
    public class SpssRepository 
    { 
     private readonly ISessionManager _sessionManager; 

     public SpssRepository(ISessionManager sessionManager) 
     { 
      _sessionManager = sessionManager; 
     } 

     public IList<Spss> ListFromSpssView() 
     { 
      ICriteria criteria = _sessionManager.GetSession().CreateCriteria(typeof(Spss)); 
      return criteria.List<Spss>(); 
     } 
    } 
} 

これは、モデルクラスです:

namespace FunctionalTests.SpssView 
{ 
    public class Spss 
    { 
     public virtual String StudentId { get; set; } 
     public virtual String UPNSCN { get; set; } 
     ... 
    } 
} 

とマッピング:

namespace FunctionalTests.SpssView 
{ 
    public sealed class SpssMap : ClassMap<Spss> 
    { 
     public SpssMap() 
     { 
      Id(x => x.StudentId).GeneratedBy.Assigned(); 
      Map(x => x.UPNSCN); 
      ... 
     } 
    } 
} 

私はIDマッピングでは全く自信がないんだけど - それはちょうどビューから読み取られますか?

これは私のテストで:

[Test] 
    public void ShouldPopulateAndRetrieveFromSpssView() 
    { 
     var mockSessionManager = new Mock<ISessionManager>(); 
     mockSessionManager.Setup(x => x.GetSession()).Returns(_session); 

     var caseRepository = new CaseRepository(mockSessionManager.Object); 
     var caseList = caseRepository.ListCases(); 
     Assert.That(caseList.Count, Is.EqualTo(2)); 

     var repository = new SpssRepository(mockSessionManager.Object); 

     var spssList = repository.ListFromSpssView(); 

     Assert.That(spssList.Count, Is.EqualTo(2)); 
    } 

ノートケース・リストコード - 私はそこに必ずDB接続が行われていたにすることを置きます。テストのこの部分は合格します。

select * from spss; 2つの結果を返します。 (私はSQL Server 2005のfwiwを使用しています)

これはプロダクションコードではないので、私はFunctionalTestsビジュアルスタジオプロジェクトに新しいフォルダを作成しました(私はこれを言います、私はメインこれと私の作業リポジトリの違い。)

このようなビューをテストすることはできますか? SQLが生成されているのが見えますか? 私は何をしていますか?

感謝:)

答えて

2

てみて、追加:たとえば

.ShowSql() 

Fluently.Configure().Database(
         MsSqlConfiguration.MsSql2005 
          .ConnectionString(
           ConfigurationManager.ConnectionStrings["my"].ConnectionString).ShowSql()) 
         .Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyClass>()) 
         .BuildSessionFactory(); 
+0

おかげで生成されたSQLがこれを加える見るために

public SpssMap() { Table("myViewBame"); // ADD THIS Id(x => x.StudentId).GeneratedBy.Assigned(); Map(x => x.UPNSCN); ... } 

!テーブルへの変更は何の違いもありませんでしたが、SqlShowは私のリポジトリがDBに全く当たらないことを確認しました。私は共通のプロジェクトにコードを移しました、それはすべて動作します...明日私は正確に調べるつもりです!再び乾杯:) – laura

+0

私の喜び!ビューとして名前が付けられたクラスであれば、違いはありませんが、投稿をやり直すことができます。 – Aliostad

関連する問題