Данное руководство устарело. Актуальное руководство: Руководство по Entity Framework Core
Итак, создадим новый проект по типу Windows Forms и добавим в него эти модели. После этого также добавим через NuGet пакет Entity Framework и следующий класс контекста данных:
using System.Data.Entity; ........................ class SoccerContext : DbContext { public SoccerContext() : base("SoccerDB2") { } public DbSet<Team> Teams { get; set; } public DbSet<Player> Players { get; set; } }
И определим модели:
public class Team { public int Id { get; set; } public string Name { get; set; } public string Coach { get; set; } public virtual ICollection<Player> Players { get; set; } public Team() { Players = new List<Player>(); } } public class Player { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public virtual ICollection<Team> Teams { get; set; } public Player() { Teams = new List<Team>(); } }
Теперь само приложение. На главной форме у нас будет в таблице выводиться список игроков:
Основной функционал будет таким же, как и в прошлой теме: один элемент DataGridView и четыре кнопки. Кроме того нам потребуется две дополнительные формы: одна для создания команды, а другая - для создания/редактирования игрока.
Добавим в проект новую форму. Назовем ее, к примеру, PlayerForm:
Здесь текстовое поле для указания имени, поле NumericUpDown для возраста и элемент ListBox, в котором будут выводиться команды. Установим у этих
элементов значение свойства Modifier равным Protected Internal
.
Также есть две кнопки. Установим у кнопки 'ОК' значение свойства DialogResult равным OK
,
а у кнопки 'Отмена' - равным Cancel
.
Форма для добавления команд, назовем ее TeamForm, будет выглядеть следующим образом:
Произведем у этой формы ту же настройку с полями и кнопками, как и у предыдущей формы.
Теперь изменим код главной формы, которая отображает игроков, на следующий:
Код формы команд:
using System.Data.Entity; public partial class Form1 : Form { SoccerContext db; public Form1() { InitializeComponent(); db = new SoccerContext(); db.Players.Load(); dataGridView1.DataSource = db.Players.Local.ToBindingList(); } private void button1_Click(object sender, EventArgs e) { PlayerForm plForm = new PlayerForm(); // добавляем список команд на форму plForm List<Team> teams = db.Teams.ToList(); plForm.listBox1.DataSource = teams; plForm.listBox1.ValueMember = "Id"; plForm.listBox1.DisplayMember = "Name"; DialogResult result = plForm.ShowDialog(this); if (result == DialogResult.Cancel) return; Player player = new Player(); player.Age = (int)plForm.numericUpDown1.Value; player.Name = plForm.textBox1.Text; teams.Clear(); // очищаем список и заново заполняем его выделенными элементами foreach (var item in plForm.listBox1.SelectedItems) { teams.Add((Team)item); } player.Teams = teams; db.Players.Add(player); db.SaveChanges(); MessageBox.Show("Новый игрок добавлен"); } // редактирование private void button2_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count < 1) return; int index = dataGridView1.SelectedRows[0].Index; int id = 0; bool converted = Int32.TryParse(dataGridView1[0, index].Value.ToString(), out id); if (converted == false) return; Player player = db.Players.Find(id); PlayerForm plForm = new PlayerForm(); plForm.numericUpDown1.Value = player.Age; plForm.textBox1.Text = player.Name; // получаем список команд List<Team> teams = db.Teams.ToList(); plForm.listBox1.DataSource = teams; plForm.listBox1.ValueMember = "Id"; plForm.listBox1.DisplayMember = "Name"; foreach(Team t in player.Teams) plForm.listBox1.SelectedItem = t; DialogResult result = plForm.ShowDialog(this); if (result == DialogResult.Cancel) return; player.Age = (int)plForm.numericUpDown1.Value; player.Name = plForm.textBox1.Text; // проверяем наличие команд у игрока foreach (var team in teams) { if (plForm.listBox1.SelectedItems.Contains(team)) { if (!player.Teams.Contains(team)) player.Teams.Add(team); } else { if (player.Teams.Contains(team)) player.Teams.Remove(team); } } db.Entry(player).State = EntityState.Modified; db.SaveChanges(); MessageBox.Show("Информация обновлена"); } // удаление private void button3_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count < 1) return; int index = dataGridView1.SelectedRows[0].Index; int id = 0; bool converted = Int32.TryParse(dataGridView1[0, index].Value.ToString(), out id); if (converted == false) return; Player player = db.Players.Find(id); db.Players.Remove(player); db.SaveChanges(); MessageBox.Show("Футболист удален"); } // добавление новой команды private void button4_Click(object sender, EventArgs e) { TeamForm tmForm = new TeamForm(); DialogResult result = tmForm.ShowDialog(this); if (result == DialogResult.Cancel) return; Team team = new Team(); team.Name = tmForm.textBox1.Text; team.Coach = tmForm.textBox2.Text; team.Players = new List<Player>(); db.Teams.Add(team); db.SaveChanges(); MessageBox.Show("Новая команда добавлена"); } }