ошибки с доб автора
This commit is contained in:
parent
aba1c6104e
commit
cd675d40db
@ -18,6 +18,7 @@ namespace BookShopDataBaseImplement.Implements
|
|||||||
{
|
{
|
||||||
using var context = new BookShopDatabase();
|
using var context = new BookShopDatabase();
|
||||||
return context.Books
|
return context.Books
|
||||||
|
.Include(x => x.Genre)
|
||||||
.Include(x => x.Authors)
|
.Include(x => x.Authors)
|
||||||
.ThenInclude(x => x.Author)
|
.ThenInclude(x => x.Author)
|
||||||
.ToList()
|
.ToList()
|
||||||
@ -96,6 +97,7 @@ namespace BookShopDataBaseImplement.Implements
|
|||||||
{
|
{
|
||||||
using var context = new BookShopDatabase();
|
using var context = new BookShopDatabase();
|
||||||
var element = context.Books
|
var element = context.Books
|
||||||
|
.Include(x => x.Genre)
|
||||||
.Include(x => x.Authors)
|
.Include(x => x.Authors)
|
||||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||||
if (element != null)
|
if (element != null)
|
||||||
|
@ -12,7 +12,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|||||||
namespace BookShopDataBaseImplement.Migrations
|
namespace BookShopDataBaseImplement.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(BookShopDatabase))]
|
[DbContext(typeof(BookShopDatabase))]
|
||||||
[Migration("20230507194055_InitialCreate")]
|
[Migration("20230508181531_InitialCreate")]
|
||||||
partial class InitialCreate
|
partial class InitialCreate
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@ -181,11 +181,13 @@ namespace BookShopDataBaseImplement.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("BookShopDataBaseImplement.Models.Book", b =>
|
modelBuilder.Entity("BookShopDataBaseImplement.Models.Book", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("BookShopDataBaseImplement.Models.Genre", null)
|
b.HasOne("BookShopDataBaseImplement.Models.Genre", "Genre")
|
||||||
.WithMany("Books")
|
.WithMany("Books")
|
||||||
.HasForeignKey("GenreId")
|
.HasForeignKey("GenreId")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Genre");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("BookShopDataBaseImplement.Models.BookAuthor", b =>
|
modelBuilder.Entity("BookShopDataBaseImplement.Models.BookAuthor", b =>
|
@ -178,11 +178,13 @@ namespace BookShopDataBaseImplement.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("BookShopDataBaseImplement.Models.Book", b =>
|
modelBuilder.Entity("BookShopDataBaseImplement.Models.Book", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("BookShopDataBaseImplement.Models.Genre", null)
|
b.HasOne("BookShopDataBaseImplement.Models.Genre", "Genre")
|
||||||
.WithMany("Books")
|
.WithMany("Books")
|
||||||
.HasForeignKey("GenreId")
|
.HasForeignKey("GenreId")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Genre");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("BookShopDataBaseImplement.Models.BookAuthor", b =>
|
modelBuilder.Entity("BookShopDataBaseImplement.Models.BookAuthor", b =>
|
||||||
|
@ -23,7 +23,7 @@ namespace BookShopDataBaseImplement.Models
|
|||||||
public double Cost { get; set; }
|
public double Cost { get; set; }
|
||||||
[Required]
|
[Required]
|
||||||
public int GenreId { get; set; }
|
public int GenreId { get; set; }
|
||||||
|
public virtual Genre Genre { get; set; }
|
||||||
private Dictionary<int, IAuthorModel>? _bookAuthors = null;
|
private Dictionary<int, IAuthorModel>? _bookAuthors = null;
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public Dictionary<int, IAuthorModel> BookAuthors
|
public Dictionary<int, IAuthorModel> BookAuthors
|
||||||
@ -49,6 +49,7 @@ namespace BookShopDataBaseImplement.Models
|
|||||||
BookName = model.BookName,
|
BookName = model.BookName,
|
||||||
Cost = model.Cost,
|
Cost = model.Cost,
|
||||||
Count = model.Count,
|
Count = model.Count,
|
||||||
|
GenreId = model.GenreId,
|
||||||
Authors = model.BookAuthors.Select(x => new BookAuthor
|
Authors = model.BookAuthors.Select(x => new BookAuthor
|
||||||
{
|
{
|
||||||
Author = context.Authors.First(y => y.Id == x.Key)
|
Author = context.Authors.First(y => y.Id == x.Key)
|
||||||
@ -59,14 +60,27 @@ namespace BookShopDataBaseImplement.Models
|
|||||||
{
|
{
|
||||||
BookName = model.BookName;
|
BookName = model.BookName;
|
||||||
Cost = model.Cost;
|
Cost = model.Cost;
|
||||||
|
Cost = model.Cost;
|
||||||
|
GenreId = model.GenreId;
|
||||||
}
|
}
|
||||||
public BookViewModel GetViewModel => new()
|
public BookViewModel GetViewModel
|
||||||
{
|
{
|
||||||
Id = Id,
|
|
||||||
|
get
|
||||||
|
|
||||||
|
{
|
||||||
|
using var context = new BookShopDatabase();
|
||||||
|
return new BookViewModel
|
||||||
|
{
|
||||||
|
Id = Id,
|
||||||
BookName = BookName,
|
BookName = BookName,
|
||||||
Cost = Cost,
|
Cost = Cost,
|
||||||
|
GenreId= GenreId,
|
||||||
|
GenreName = context.Genres.FirstOrDefault(x => x.Id == GenreId)?.GenreName ?? string.Empty,
|
||||||
BookAuthors = BookAuthors
|
BookAuthors = BookAuthors
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
public void UpdateAuthors(BookShopDatabase context, BookBindingModel model)
|
public void UpdateAuthors(BookShopDatabase context, BookBindingModel model)
|
||||||
{
|
{
|
||||||
var bookAuthors = context.BookAuthors.Where(rec =>
|
var bookAuthors = context.BookAuthors.Where(rec =>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using BookShopDataModels.Models;
|
using BookShopDataModels.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -14,6 +15,8 @@ namespace BookShopContracts.ViewModels
|
|||||||
public double Cost { get; set; }
|
public double Cost { get; set; }
|
||||||
public int Count { get; set; }
|
public int Count { get; set; }
|
||||||
public int GenreId { get; set; }
|
public int GenreId { get; set; }
|
||||||
|
[DisplayName("GenreName")]
|
||||||
|
public string GenreName { get; set; } = string.Empty;
|
||||||
public Dictionary<int, IAuthorModel> BookAuthors { get; set; }
|
public Dictionary<int, IAuthorModel> BookAuthors { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
23
BookShopView/FormBook.Designer.cs
generated
23
BookShopView/FormBook.Designer.cs
generated
@ -44,6 +44,8 @@
|
|||||||
this.buttonSave = new System.Windows.Forms.Button();
|
this.buttonSave = new System.Windows.Forms.Button();
|
||||||
this.buttonCancel = new System.Windows.Forms.Button();
|
this.buttonCancel = new System.Windows.Forms.Button();
|
||||||
this.comboBoxGenre = new System.Windows.Forms.ComboBox();
|
this.comboBoxGenre = new System.Windows.Forms.ComboBox();
|
||||||
|
this.ColumnID = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
|
this.ColumnAuthorSurname = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
this.groupBox.SuspendLayout();
|
this.groupBox.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
@ -163,6 +165,9 @@
|
|||||||
//
|
//
|
||||||
this.dataGridView.BackgroundColor = System.Drawing.SystemColors.Control;
|
this.dataGridView.BackgroundColor = System.Drawing.SystemColors.Control;
|
||||||
this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||||
|
this.dataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||||
|
this.ColumnID,
|
||||||
|
this.ColumnAuthorSurname});
|
||||||
this.dataGridView.Location = new System.Drawing.Point(6, 26);
|
this.dataGridView.Location = new System.Drawing.Point(6, 26);
|
||||||
this.dataGridView.Name = "dataGridView";
|
this.dataGridView.Name = "dataGridView";
|
||||||
this.dataGridView.RowHeadersWidth = 51;
|
this.dataGridView.RowHeadersWidth = 51;
|
||||||
@ -198,6 +203,21 @@
|
|||||||
this.comboBoxGenre.Size = new System.Drawing.Size(261, 28);
|
this.comboBoxGenre.Size = new System.Drawing.Size(261, 28);
|
||||||
this.comboBoxGenre.TabIndex = 10;
|
this.comboBoxGenre.TabIndex = 10;
|
||||||
//
|
//
|
||||||
|
// ColumnID
|
||||||
|
//
|
||||||
|
this.ColumnID.HeaderText = "ID";
|
||||||
|
this.ColumnID.MinimumWidth = 6;
|
||||||
|
this.ColumnID.Name = "ColumnID";
|
||||||
|
this.ColumnID.Visible = false;
|
||||||
|
this.ColumnID.Width = 125;
|
||||||
|
//
|
||||||
|
// ColumnAuthorSurname
|
||||||
|
//
|
||||||
|
this.ColumnAuthorSurname.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
|
||||||
|
this.ColumnAuthorSurname.HeaderText = "Автор";
|
||||||
|
this.ColumnAuthorSurname.MinimumWidth = 6;
|
||||||
|
this.ColumnAuthorSurname.Name = "ColumnAuthorSurname";
|
||||||
|
//
|
||||||
// FormBook
|
// FormBook
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
|
||||||
@ -216,6 +236,7 @@
|
|||||||
this.Controls.Add(this.labelName);
|
this.Controls.Add(this.labelName);
|
||||||
this.Name = "FormBook";
|
this.Name = "FormBook";
|
||||||
this.Text = "Книга";
|
this.Text = "Книга";
|
||||||
|
this.Load += new System.EventHandler(this.FormBook_Load);
|
||||||
this.groupBox.ResumeLayout(false);
|
this.groupBox.ResumeLayout(false);
|
||||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
@ -241,5 +262,7 @@
|
|||||||
private Button buttonSave;
|
private Button buttonSave;
|
||||||
private Button buttonCancel;
|
private Button buttonCancel;
|
||||||
private ComboBox comboBoxGenre;
|
private ComboBox comboBoxGenre;
|
||||||
|
private DataGridViewTextBoxColumn ColumnID;
|
||||||
|
private DataGridViewTextBoxColumn ColumnAuthorSurname;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -32,38 +32,26 @@ namespace BookShopView
|
|||||||
_bookAuthors = new Dictionary<int, IAuthorModel>();
|
_bookAuthors = new Dictionary<int, IAuthorModel>();
|
||||||
_logicG = logicG;
|
_logicG = logicG;
|
||||||
}
|
}
|
||||||
private readonly List<GenreViewModel>? _list;
|
|
||||||
public int GenreId
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return Convert.ToInt32(comboBoxGenre.SelectedValue);
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
comboBoxGenre.SelectedValue = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public IGenreModel? GenreModel
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (_list == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
foreach (var elem in _list)
|
|
||||||
{
|
|
||||||
if (elem.Id == GenreId)
|
|
||||||
{
|
|
||||||
return elem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private void FormBook_Load(object sender, EventArgs e)
|
private void FormBook_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
_logger.LogInformation("Загрузка жанров");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var list = _logicG.ReadList(null);
|
||||||
|
if (list != null)
|
||||||
|
{
|
||||||
|
comboBoxGenre.DisplayMember = "Genre";
|
||||||
|
comboBoxGenre.ValueMember = "ID";
|
||||||
|
comboBoxGenre.DataSource = list.Select(c => c.GenreName).ToList();
|
||||||
|
comboBoxGenre.SelectedItem = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка загрузки списка жанров");
|
||||||
|
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
if (_id.HasValue)
|
if (_id.HasValue)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Загрузка книги");
|
_logger.LogInformation("Загрузка книги");
|
||||||
@ -93,28 +81,13 @@ namespace BookShopView
|
|||||||
}
|
}
|
||||||
private void LoadData()
|
private void LoadData()
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Загрузка жанров");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var list = _logicG.ReadList(null);
|
|
||||||
if (list != null)
|
|
||||||
{
|
|
||||||
comboBoxGenre.DisplayMember = "GenreName";
|
|
||||||
comboBoxGenre.ValueMember = "ID";
|
|
||||||
comboBoxGenre.DataSource = list;
|
|
||||||
comboBoxGenre.SelectedItem = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.LogError(ex, "Ошибка загрузки списка жанров");
|
|
||||||
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
||||||
}
|
|
||||||
_logger.LogInformation("Загрузка автора книги");
|
_logger.LogInformation("Загрузка автора книги");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (_bookAuthors != null)
|
if (_bookAuthors != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
dataGridView.Rows.Clear();
|
dataGridView.Rows.Clear();
|
||||||
foreach (var pc in _bookAuthors)
|
foreach (var pc in _bookAuthors)
|
||||||
{
|
{
|
||||||
|
@ -57,4 +57,10 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<metadata name="ColumnID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="ColumnAuthorSurname.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
</root>
|
</root>
|
Loading…
Reference in New Issue
Block a user