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- > ProjectとRClick-右ボタンの記述を省略します)
次に、Nuget Packageを起動します( ツール->ライブラリパッケージマネージャー->パッケージマネージャーコンソール )。 次の行を記述します: Install-Package FluentNHibernate 。 Enterキーを押して、FluentNHibernatのインストールが完了するまで待ちます。
FluentNhibernateの特定のバージョンをインストールする必要がある場合は、NuGet Webサイトwww.nuget.org/packages/FluentNHibernate/2.0.1のバージョンテーブルの行を探してください。
1.2 FluentNHibernateの構成
- SQL Server Managerデータベースを開き、そこにBibliotecaデータベースを作成します
- Visual Studioを開き、「Models」フォルダーでクラス「Book.cs」を作成します(Models-> Book.cs)
- 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_AuthorやBook_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)に変更するように列を変更できます)。
その後、ページを更新すると、下の画像のようになります。