ASP.NET MVCおよびSQL Serverを使用したFluentNHibernateのチュートリアル。 パート1

どうなるの? 書籍サイトの例に関するFluentNHibernateのレッスン。書​​籍に関する情報の表示、書籍のリストの表示、ジャンルによるフィルタリング、名前による検索、書籍の追加、編集、削除を行うことができます。 すべての種類のテーブルの関係(1対1、1対多、多対多)、レコードの作成、編集、削除、フィルタリング、検索、ページごとの表示が考慮されます。 レッスンで使用されるプログラム:Visual Studio 2013、SQL Server 2008 Manager Studio。



NHibernateとMVCを使用した簡単なCRUD操作の簡単な紹介については、次の英語の記事を読むことをお勧めします: www.dotnetjalps.com/2014/07/fluent-nhibernate-asp-net-mvc-crud.html



また、役に立つ記事もここにあります: github.com/jagregory/fluent-nhibernate/wiki/Getting-started (英語); およびその翻訳: habrahabr.ru/post/125135



ロシア語のその他のリンク: slynetblog.blogspot.com/2009/10/nhibernate-1.html



内容

パート1.最初のアプリケーションの起動

パート2.クラスの作成、データベースへのマッピングおよび入力



1.最初のアプリケーションの開始

1.1 Fluent NHibernateのインストール

Visual Studioを開き、[ファイル]メニューを開き、[新規]および[プロジェクト]サブメニューに移動します。 開いたウィンドウで、ASP.NET MVC 4を選択します(.Net Framework 4バージョンが選択されている場合)。 「BibliotecaTutor」という名前を入力し、タイプ「Basic」を選択します。 (次に、 File-> New- > ProjectRClick-右ボタンの記述を省略します)







次に、Nuget Packageを起動します( ツール->ライブラリパッケージマネージャー->パッケージマネージャーコンソール )。 次の行を記述します: Install-Package FluentNHibernate 。 Enterキーを押して、FluentNHibernatのインストールが完了するまで待ちます。







FluentNhibernateの特定のバージョンをインストールする必要がある場合は、NuGet Webサイトwww.nuget.org/packages/FluentNHibernate/2.0.1のバージョンテーブルの行を探してください。



1.2 FluentNHibernateの構成

  1. SQL Server Managerデータベースを開き、そこにBibliotecaデータベースを作成します
  2. Visual Studioを開き、「Models」フォルダーでクラス「Book.cs」を作成します(Models-> Book.cs)
  3. ModelsにNHibernateフォルダーを作成し、そこにNHibernateHelper.csクラスを追加します( Models-> NHibernate-> NHibernateHelper.cs


using FluentNHibernate.Cfg; using FluentNHibernate.Cfg.Db; using NHibernate; using NHibernate.Tool.hbm2ddl; public class NHibernateHelper { public static ISession OpenSession() { ISessionFactory sessionFactory = Fluently.Configure() // .     MS Sql Server 2008 .Database(MsSqlConfiguration.MsSql2008.ConnectionString(@"Server=..\SQLENTERPRISE; initial catalog= Biblioteca; Integrated Security=SSPI;") .ShowSql() ) //.  AddFromAssemblyOf NHibernate         (assembly).    . .Mappings(m =>m.FluentMappings.AddFromAssemblyOf<Book>()) //SchemeUpdate  /      (2  ==true) .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true)) .BuildSessionFactory(); return sessionFactory.OpenSession(); } }
      
      





1.3リンク、クラス、マッピング

次のテーブルがプロジェクトに作成されます:Book、Author、Genre、Series、およびMind。







1.3.1通信

1対1-エンティティAのどのインスタンスにも、エンティティBの1つのインスタンスのみが対応し、その逆も同様です。 例、 ブックおよびマインドテーブル。 Metro 2033という本のレビューを書いた場合、Metro 2034という本とまったく同じレビューを適用することはできません。また、Metro 2034という本の私のレビューは、Metro 2033には適していません。



これらのデータはすべて1つのテーブルに正常に配置できるため、1対1の通信はほとんど使用されません。 何らかの理由で1つのテーブルを2つのテーブルに分割する場合に、このような場合に使用されます。 たとえば、多くの場合空であるフィールドは、別のテーブルに配置します。



1対多/多対1-エンティティAの任意のインスタンスに対応し、エンティティBの0、1、または複数のインスタンスに対応しますが、エンティティAの1つのインスタンスのみがエンティティBのインスタンスに対応します。 1つのシリーズ/サイクルに多数の本が存在する場合がありますが、本自体は1つのシリーズ/サイクルにのみ含めることができます。



1対多と多対1の関係の違いは何ですか? 「学生ポートフォリオ」と「学生ポートフォリオ」というフレーズの間と同じです。 つまり、2つのオブジェクトの関係で主なものが誰であるかが重要です-学生またはポートフォリオ。



多対多 -エンティティAのインスタンスは、エンティティBの0、1つ以上のインスタンスに対応し、エンティティBのインスタンスは、エンティティAの0、1、または複数のインスタンスに対応します。 複数の著者が1冊の本、たとえばアンソロジーを扱っていますが、著者は複数の本を持っている場合があります。 これらのテーブルは、 Book_AuthorBook_Genreなどのステージングテーブルを使用してリンクされます。



1.3.2ブッククラスとマッピング

Webページ上のSQL Serverデータベースに保存された本のデータを表示する簡単なアプリケーションを作成しましょう。 Bookクラスに入力して、そのためのマッピングクラスを作成します。



 using System; using FluentNHibernate.Mapping; namespace BibliotecaTutor.Models { public class Book { public virtual int Id { get; set; } // public virtual string Name { get; set; } // public virtual string Description { get; set; } //   public virtual int MfRaiting { get; set; } ////  public virtual int PageNumber { get; set; } //   public virtual string Image { get; set; } //   (  !) public virtual DateTime IncomeDate { get; set; } } //  public class BookMap : ClassMap<Book> { public BookMap() { Id(x => x.Id); Map(x => x.Name); Map(x => x.Description); Map(x => x.MfRaiting); Map(x => x.PageNumber); Map(x => x.Image); Map(x => x.IncomeDate); } } }
      
      





マッピングの目的は何ですか? その助けを借りて、BookクラスのデータをBookテーブル(後で作成します)に接続し、列の名前を変更し、リレーションシップの種類を決定します。



Book Modelを作成した後、コントローラーを作成し( Controller-> RClick-> Add-> Controller )、それをHomeControllerと呼びます。 Bookテーブルのすべての本を表示するコードを記述します。



  public ActionResult Index() { using (ISession session = NHibernateHelper.OpenSession()) { book = session.Query<Book>().ToList() return View(book); } }
      
      





次に、書籍のすべてのエントリを表示する、厳密に型指定されたビュー(ビュー)を作成します。 (赤いキャプションビュー(書籍)->ビューの追加をクリックします )。 下図のように、チェックを入れて次のパラメーターを選択します(モデルクラスでリストからモデルブックを選択できるように、ビルド->ソリューションのビルドプロジェクトをビルドします)。







Bookクラスのすべてのフィールドが表示される自動生成コードが表示されます。 ビューを作成した後、プロジェクトを実行します(F5)。 空白のページが表示されます。



ただし、SQL Server Manager Studioを開いてBibliotecaデータベースを調べると、Bookテーブルがそこに表示されます。 データを入力します。







(たとえば、説明をnVarChar(255)からtextまたはNVarChar(Max)に変更するように列を変更できます)。







その後、ページを更新すると、下の画像のようになります。










All Articles