Предыдущие части.
Уроки по FluentNHibernate c ASP.NET MVC и SQL Server. Часть 1
Часть 2. Создание классов, маппингов и заполнение БД
В предыдущей части было рассмотрено создание классов и маппинг-классов к ним. В 3 кратких таблицах были представлены маппинги связей один-к-одному, один-ко-многим, многие-ко-многим. Заполнили таблицы в sql server'e данными. В этой статье отобразим данные из БД в представлении View. Вначале добавим изображения в проект.
Отображение данных из таблицы в представление
Прежде чем создавать представление, для начала добавим в приложение изображения. Создадим в папке Content папку img.
и добавим туда изображения, к примеру, обложки этих книг.
yadi.sk/a/OZVgEhJ1iXukT
Далее изменим контроллер, чтобы он отображал данные, связанные с книгой.
---код Lazyloading загрузки — ---Query Over---
using (ISession session = NHibernateHelper.OpenSession()) {
Genre genreAl = null;
Author authorAl = null;
Series seriesAl = null;
var books = session.QueryOver<Book>()
//Left Join с таблицей Genres
.JoinAlias(p => p.Genres, () => genreAl, JoinType.LeftOuterJoin)
.JoinAlias(p => p.Authors, () => authorAl, JoinType.LeftOuterJoin)
.JoinAlias(p => p.Series, () => seriesAl, JoinType.LeftOuterJoin)
//Убирает повторяющиеся id номера таблицы Book.
.TransformUsing(Transformers.DistinctRootEntity).List();
return View(books);
}
@model IEnumerable<BibliotecaTutor.Models.Book>
@{ Layout = null; }
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<style> th,td {border: 1px solid; } </style>
</head>
<body>
<p>@Html.ActionLink("Create New", "Create")</p>
<table>
<tr>
<th>@Html.DisplayNameFor(model => model.Image)</th>
<th>@Html.DisplayNameFor(model => model.Name)</th>
<th>@Html.DisplayNameFor(model => model.MfRaiting)</th>
<th>@Html.DisplayNameFor(model => model.Mind)</th>
<th>@Html.DisplayNameFor(model => model.Series)</th>
<th>@Html.DisplayNameFor(model => model.Genres)</th>
<th>@Html.DisplayNameFor(model => model.Authors)</th>
<th>Операции</th>
</tr>
@foreach (var item in Model) {
<tr>
<td> <img src="~/Content/img/@item.Image" /></td>//Ссылка на рисунки
<td>@Html.DisplayFor(modelItem => item.Name)</td>
<td>@Html.DisplayFor(modelItem => item.MfRaiting)</td>
<td>@Html.DisplayFor(modelItem => item.Mind.MyMind)</td>
@{string strSeries = item.Series!=null?item.Series.Name:null;}
<td>@Html.DisplayFor(modelItem => strSeries)</td>
<td>
@foreach (var genre in item.Genres) {
string strGenre = genre!= null ? genre.Name : null;
@Html.DisplayFor(modelItem => strGenre) <br />
}
</td>
<td>
@foreach (var author in item.Authors) {
string strAuthor = author != null ? author.Name : null;
@Html.DisplayFor(modelItem => strAuthor) <br />
}
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
@Html.ActionLink("Details", "Details", new { id = item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
</td>
</tr>
}
</table>
</body>
</html>
//Класс Двумерных фигур
public class TwoDShape {
//Ширина
public virtual int Width { get; set; }
//Высота
public virtual int Height { get; set; }
}
//Класс треугольник
public class Triangle : TwoDShape {
//Идентификационный номер
public virtual int Id { get; set; }
//Вид треугольника
public virtual string Style { get; set; }
}
//Маппинг треугольника
public class TriangleMap : ClassMap<Triangle> {
public TriangleMap() {
Id(x => x.Id);
Map(x => x.Style);
Map(x => x.Height);
Map(x => x.Width);
}
}
К сожалению, не доступен сервер mySQL