231 votes

Supprimer un seul enregistrement d'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 ?

0voto

Utilisation de EntityFramework.Plus pourrait être une option :

dbContext.Employ.Where(e => e.Id == 1).Delete();

D'autres exemples sont disponibles aquí

0voto

Sikander Iqbal Points 76

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.

0voto

arvin aquio Points 1

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.

0voto

Emilio.NT Points 81

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.

0voto

dE Source Points 95

Le meilleur moyen est de vérifier puis de supprimer

        if (ctx.Employ.Any(r=>r.Id == entity.Id))
        {
            Employ rec = new Employ() { Id = entity.Id };
            ctx.Entry(rec).State = EntityState.Deleted;
            ctx.SaveChanges();
        }

Prograide.com

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.

Powered by:

X