I have the following example of a software that uses the Entity Framework , which accesses a database with only one table named Produtos
with the following fields:
- Field
int produtoid
. - Field
string nomeproduto
. - Field
int categoriaid
.
It also has a form where I do CRUD , see:
HereisthecodeofthetwoEF-generatedfilesthatismyContextandmyclassProdutos
.
ClassProdutos
:
namespaceCRUD_EF{usingSystem;usingSystem.Collections.Generic;publicpartialclassProdutos{publicintprodutoid{get;set;}publicstringnomeproduto{get;set;}publicintcategoriaid{get;set;}}}
ClassExemploEFEntities
:
namespaceCRUD_EF{usingSystem;usingSystem.Data.Entity;usingSystem.Data.Entity.Infrastructure;publicpartialclassExemploEFEntities:DbContext{publicExemploEFEntities():base("name=ExemploEFEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Produtos> Produtos { get; set; }
}
}
And this is the whole code of my form (Form1.cs):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CRUD_EF
{
public partial class frmPrincipal : Form
{
public frmPrincipal()
{
InitializeComponent();
}
private void frmPrincipal_Load(object sender, EventArgs e)
{
lerProdutos();
}
private void lerProdutos()
{
ExemploEFEntities context = new ExemploEFEntities();
IEnumerable<Produtos> produtos = from p
in context.Produtos
select p;
dataGridViewProdutos.DataSource = produtos.ToList();
}
private void incluir(string nomeProduto, int idCategoria)
{
ExemploEFEntities context = new ExemploEFEntities();
Produtos novoProduto = new Produtos()
{
nomeproduto = nomeProduto,
categoriaid = idCategoria
};
context.Produtos.Add(novoProduto);
context.SaveChanges();
lerProdutos();
}
private void btnIncluir_Click(object sender, EventArgs e)
{
incluir(txtNome.Text, Convert.ToInt32(txtCategoriaID.Text));
}
private void btnAlterar_Click(object sender, EventArgs e)
{
alterar();
}
private void alterar()
{
ExemploEFEntities context = new ExemploEFEntities();
int id = Convert.ToInt32(txtProdutoId.Text);
Produtos produto = context.Produtos.First(p => p.produtoid == id);
produto.nomeproduto = txtNome.Text;
produto.categoriaid = Convert.ToInt32(txtCategoriaID.Text);
context.SaveChanges();
lerProdutos();
}
private void deletar()
{
ExemploEFEntities context = new ExemploEFEntities();
int id = Convert.ToInt32(txtProdutoId.Text);
Produtos produto = context.Produtos.First(p => p.produtoid == id);
context.Produtos.Remove(produto);
context.SaveChanges();
lerProdutos();
}
private void btnExcluir_Click(object sender, EventArgs e)
{
deletar();
}
private void query(int id)
{
ExemploEFEntities context = new ExemploEFEntities();
Produtos produto = context.Produtos.First(p => p.produtoid == id);
txtProdutoId.Text = produto.produtoid.ToString();
txtNome.Text = produto.nomeproduto.ToString();
txtCategoriaID.Text = produto.categoriaid.ToString();
}
private void dataGridViewProdutos_CellEnter(object sender, DataGridViewCellEventArgs e)
{
try
{
int id = Convert.ToInt32(dataGridViewProdutos.Rows[e.RowIndex].Cells[0].Value);
query(id);
}
catch
{
MessageBox.Show("Houve um erro!");
}
}
}
}
My doubt.
Given the entire structure generated by the Entity Framework I would like to know how and where I could implement the business rules?
To facilitate and illustrate the situation we will consider the following rule:
It is not allowed to register products with exactly the same name.
How and where would I implement this rule?