J'ai une table SQL Server dans Entity Framework nommée employ
avec une seule colonne clé nommée ID
.
Comment supprimer un seul enregistrement de la table en utilisant Entity Framework ?
J'ai une table SQL Server dans Entity Framework nommée employ
avec une seule colonne clé nommée ID
.
Comment supprimer un seul enregistrement de la table en utilisant Entity Framework ?
Utilisation de EntityFramework.Plus pourrait être une option :
dbContext.Employ.Where(e => e.Id == 1).Delete();
D'autres exemples sont disponibles aquí
Vous pouvez le faire simplement comme ceci
public ActionResult Delete(int? id)
{
using (var db = new RegistrationEntities())
{
Models.RegisterTable Obj = new Models.RegisterTable();
Registration.DAL.RegisterDbTable personalDetail = db.RegisterDbTable.Find(id);
if (personalDetail == null)
{
return HttpNotFound();
}
else
{
Obj.UserID = personalDetail.UserID;
Obj.FirstName = personalDetail.FName;
Obj.LastName = personalDetail.LName;
Obj.City = personalDetail.City;
}
return View(Obj);
}
}
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int? id)
{
using (var db = new RegistrationEntities())
{
Registration.DAL.RegisterDbTable personalDetail = db.RegisterDbTable.Find(id);
db.RegisterDbTable.Remove(personalDetail);
db.SaveChanges();
return RedirectToAction("where u want it to redirect");
}
}
modèle
public class RegisterTable
{
public int UserID
{ get; set; }
public string FirstName
{ get; set; }
public string LastName
{ get; set; }
public string Password
{ get; set; }
public string City
{ get; set; }
}
vue à partir de laquelle vous l'appellerez
<table class="table">
<tr>
<th>
FirstName
</th>
<th>
LastName
</th>
<th>
City
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td> @item.FirstName </td>
<td> @item.LastName </td>
<td> @item.City</td>
<td>
<a href="@Url.Action("Edit", "Registeration", new { id = item.UserID })">Edit</a> |
<a href="@Url.Action("Details", "Registeration", new { id = item.UserID })">Details</a> |
<a href="@Url.Action("Delete", "Registeration", new { id = item.UserID })">Delete</a>
</td>
</tr>
}
</table>
J'espère que ce sera facile à comprendre pour vous.
Vous pouvez faire quelque chose comme ceci dans l'événement click ou celldoubleclick de votre grille (si vous en avez utilisé une)
if(dgEmp.CurrentRow.Index != -1)
{
employ.Id = (Int32)dgEmp.CurrentRow.Cells["Id"].Value;
//Some other stuff here
}
Ensuite, faites quelque chose comme ceci dans votre bouton de suppression :
using(Context context = new Context())
{
var entry = context.Entry(employ);
if(entry.State == EntityState.Detached)
{
//Attached it since the record is already being tracked
context.Employee.Attach(employ);
}
//Use Remove method to remove it virtually from the memory
context.Employee.Remove(employ);
//Finally, execute SaveChanges method to finalized the delete command
//to the actual table
context.SaveChanges();
//Some stuff here
}
Vous pouvez également utiliser une requête LINQ au lieu d'utiliser la requête LINQ To Entities :
var query = (from emp in db.Employee
where emp.Id == employ.Id
select emp).Single();
employ.Id est utilisé comme paramètre de filtrage qui a déjà été transmis par l'événement CellDoubleClick de votre DataGridView.
Voici un moyen sûr :
using (var transitron = ctx.Database.BeginTransaction())
{
try
{
var employer = new Employ { Id = 1 };
ctx.Entry(employer).State = EntityState.Deleted;
ctx.SaveChanges();
transitron.Commit();
}
catch (Exception ex)
{
transitron.Rollback();
//capture exception like: entity does not exist, Id property does not exist, etc...
}
}
Ici, vous pouvez empiler toutes les modifications que vous voulez, de sorte que vous pouvez faire une série de suppressions avant le SaveChanges et le Commit, de sorte qu'elles ne seront appliquées que si elles sont toutes réussies.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.