Удалить строку Модель объекта ASP.NET MVC ADO.NET

1

Я новичок в среде ASP.NET MVC

Я пытаюсь удалить ROW из 3 таблицы/сущности (потому что я использую модель данных сущностей ado.net для автоматического создания базы данных) проблема заключается в том, что моя функция удаления выполняется только из ROW из 1 таблицы.

PS: Я уже создал связь между 3 таблицами

вот мой контроллер:

    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        // i've edited this code, i think the problem lies in this code bellow
        // start edited code
        ms_student ms_student = db.ms_student
             .Include(i => i.ms_person) 
             .Include(i => i.ms_person.ms_user)
             .Where(i => i.user_id_student == id)
             .Single(); 
        // end edited code

        db.ms_student.Remove(ms_student);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

это моя модель ms_user:

namespace test.Models
{
    using System;
    using System.Collections.Generic;

    public partial class ms_user
    {
        public int ID { get; set; }
        public string password { get; set; }
        public string salt { get; set; }
        public Nullable<int> administrative_type_id { get; set; }
        public string email_login { get; set; }

        public virtual ms_person ms_person { get; set; }
    }
}

это ms_person модель:

namespace test.Models
{
    using System;
    using System.Collections.Generic;

    public partial class ms_person
    {  
        public int ID { get; set; }
        public Nullable<int> family_id { get; set; }
        public string first_name { get; set; }
        public string last_name { get; set; }
        public string email { get; set; }
        public string address { get; set; }
        public string phone_address { get; set; }
        public string mobile_phone_number { get; set; }
        public string gender { get; set; }
        public Nullable<System.DateTime> date_of_bith { get; set; }
        public Nullable<System.DateTime> date_start { get; set; }
        public Nullable<System.DateTime> date_end { get; set; }
        public string status { get; set; }
        public string identification_ID { get; set; }
        public string passport { get; set; }
        public Nullable<int> user_type_id { get; set; }
        public string file_image { get; set; }

        public virtual ms_student ms_student { get; set; }
        public virtual ms_user ms_user { get; set; }

    }
}

Наконец, моя модель ms_person:

namespace test.Models
{
    using System;
    using System.Collections.Generic;

    public partial class ms_student
    {
        public int user_id_student { get; set; }
        public int student_code { get; set; }
        public int course_id { get; set; }
        public string degree { get; set; }
        public Nullable<int> current_semester { get; set; }
        public string cuti_session { get; set; }

        public virtual ms_person ms_person { get; set; }
    }
}

просто вы знаете, что код модели сгенерирован автоматически, я использую модель сущностей ado.net, и единственная таблица/сущность, которые удалили, - это только таблица ms_student (извините, я смущен именованием: моделью или сущностью или таблицей)

идентификатор на ms_person - это автоматический инкремент PK ID на ms_user, фактически FK также PK ms_person и (по глупости меня для разных имен) user_id_student фактически FK также PK ms_person

Большое спасибо

Теги:
entity-framework
ado.net
asp.net-mvc

3 ответа

5
Лучший ответ

Я думаю, что я только нашел какое-то решение, я меняю контроллер delete следующим образом:

    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        // i change this piece of code, not really sure what it means though
        // very appreciate if somebody can describe it in more humanly or sql language
        ms_person ms_person = db.ms_person
             .Include(i => i.ms_student)
             .Include(i => i.ms_user)
             .Where(i => i.ID == id)
             .Single();

        db.ms_person.Remove(ms_person);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

с этим удаляется вся запись из 3-х таблиц, но я не уверен, что это лучшее решение, потому что, как вы видите, я просто изменил инструкцию Include(), и я не уверен, что этот метод можно использовать для другой контроллер...

большое спасибо, упал, если кто-то может найти лучшее решение для моей проблемы..: D

  • 0
    проголосуйте :), но вы также можете использовать Single без Where, например: .Include (i => i.ms_user) .Single (i => i.ID == id);
1

Вы также хотите удалить ms_person и ms_user?

Сделай это.

db.ms_student.Remove(ms_student);
if (ms_student.ms_person != null)
{
   db.ms_person.Remove(ms_student.ms_person);
   if (ms_student.ms_person.ms_user != null)
   {
      db.ms_user.Remove(ms_student.ms_person.ms_user);
   }
}
db.SaveChanges();
  • 0
    Спасибо за ваш ответ, Юлия, к сожалению, запись в ms_person не удаляется, но запись в ms_student и ms_user удаляется .. Я думаю, что это потому, что сущность зависима, потому что ms_user и ms_student на самом деле не имеют PK, если ms_person не существует, так что я предполагаю, что если вы хотите полностью удалить все записи из 3-х таблиц, вы должны сначала удалить ms_person ... Обратите внимание, что я не говорю об каскаде удаления или каскаде обновлений.
0
[HttpGet]
public ActionResult DeleteFacilitator( Int64 FacID)
{
  if(FacID == null)
  {
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
  }
  var Resul= db.NFE_Facilitator.Find(ID);
  if(Resul==null)
  {
      return HttpNotFound();
  }
      return View(Resul);
}
[HttpPost,ActionName("DeleteFacilitator")]
public ActionResult DeleteConfirmed( Int64 ID)
{
   var Resul= db.NFE_Facilitator.Find(ID);
   db.NFE_Facilitator.Remove(Resul);
   db.SaveChanges();
   return RedirectToAction("SearchFacilitator");
}
  • 0
    Пожалуйста, сделайте отступ в вашем коде, он вообще не читается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню