it-swarm.com.de

Einen einzelnen Datensatz aus dem Entity Framework löschen?

Ich habe eine SQL Server-Tabelle in Entity Framework namens employ mit einer einzelnen Schlüsselspalte namens ID.

Wie lösche ich einen einzelnen Datensatz mit Entity Framework aus der Tabelle?

165
user2497476

Es ist nicht erforderlich, das Objekt zuerst abzufragen, sondern Sie können es mit seiner ID ..__ an den Kontext anhängen.

var employer = new Employ { Id = 1 };
ctx.Employ.Attach(employer);
ctx.Employ.Remove(employer);
ctx.SaveChanges();

Alternativ können Sie den Status des angehängten Eintrags auf Löschen setzen:

var employer = new Employ { Id = 1 };
ctx.Entry(employer).State = EntityState.Deleted;
ctx.SaveChanges();
313
mt_serg

Sie können SingleOrDefault verwenden, um ein einzelnes Objekt zu erhalten, das Ihren Kriterien entspricht, und dieses dann an die Remove-Methode Ihrer EF-Tabelle zu übergeben.

var itemToRemove = Context.Employ.SingleOrDefault(x => x.id == 1); //returns a single item.

if (itemToRemove != null) {
    Context.Employ.Remove(itemToRemove);
    Context.SaveChanges();
}
70
Mansfield
  var stud = (from s1 in entities.Students
            where s1.ID== student.ID
            select s1).SingleOrDefault();

  //Delete it from memory
  entities.DeleteObject(stud);
  //Save to database
  entities.SaveChanges();
12
Alex G
Employer employer = context.Employers.First(x => x.EmployerId == 1);

context.Customers.DeleteObject(employer);
context.SaveChanges();
8
Sam Leach

Ich verwende Entity Framework mit LINQ. Der folgende Code war hilfreich für mich.

1- Für mehrere Datensätze

 using (var dbContext = new Chat_ServerEntities())
 {
     var allRec= dbContext.myEntities;
     dbContext.myEntities.RemoveRange(allRec);
     dbContext.SaveChanges();
 }

2- Für Einzelsatz

 using (var dbContext = new Chat_ServerEntities())
 {
     var singleRec = dbContext.ChatUserConnections.FirstOrDefault( x => x.ID ==1);// object your want to delete
     dbContext.ChatUserConnections.Remove(singleRec);
     dbContext.SaveChanges();
 }
4
Baqer Naqvi

Mehr generischer Ansatz

public virtual void Delete<T>(int id) where T : BaseEntity, new()
{
    T instance = Activator.CreateInstance<T>();
    instance.Id = id;
    if (dbContext.Entry<T>(entity).State == EntityState.Detached)
    {
        dbContext.Set<T>().Attach(entity);
    }

    dbContext.Set<T>().Remove(entity);
}
1
valentasm

sie können es einfach so machen 

   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");
        }
    }

modell-

 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; }

} 

ansicht, von der Sie es nennen werden 

 <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>

ich hoffe, dass dies leicht zu verstehen ist

1
Sikander Iqbal

Die Verwendung von EntityFramework.Plus könnte eine Option sein:

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

Weitere Beispiele sind verfügbar hier

Für generische DAO meine Arbeit finnaly dies:

    public void Detele(T entity)
    {
        db.Entry(entity).State = EntityState.Deleted;
        db.SaveChanges();
    }
0
Tom Trnka

Mit Entity Framework 6 können Sie Remove..__ verwenden. Außerdem ist es eine gute Taktik, mitusingsicherzugehen, dass Ihre Verbindung geschlossen ist.

using (var context = new EmployDbContext())
{
    Employ emp = context.Employ.Where(x => x.Id == id).Single<Employ>();
    context.Employ.Remove(emp);
    context.SaveChanges();
}
0
Gizmo
    [HttpPost]
    public JsonResult DeleteCotnact(int id)
    {
        using (MycasedbEntities dbde = new MycasedbEntities())
        {
            Contact rowcontact = (from c in dbde.Contact
                                     where c.Id == id
                                     select c).FirstOrDefault();

            dbde.Contact.Remove(rowcontact);
            dbde.SaveChanges();

            return Json(id);
        }
    }

Was denkst du darüber, einfach oder nicht, du könntest es auch versuchen:

        var productrow = cnn.Product.Find(id);
        cnn.Product.Remove(productrow);
        cnn.SaveChanges();
0
Namroy

Sie können so etwas in Ihrem Click- oder Celldoubleclick-Ereignis Ihres Grids tun (falls Sie eines verwendet haben)

if(dgEmp.CurrentRow.Index != -1)
 {
    employ.Id = (Int32)dgEmp.CurrentRow.Cells["Id"].Value;
    //Some other stuff here
 }

Dann mache so etwas in deinem Delete Button:

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
}

Alternativ können Sie eine LINQ-Abfrage anstelle der LINQ To Entities-Abfrage verwenden:

var query = (from emp in db.Employee
where emp.Id == employ.Id
select emp).Single();

deploy.Idwird als Filterparameter verwendet, der bereits vom CellDoubleClick-Ereignis Ihrer DataGridView übergeben wurde.

0
arvin aquio