Я новичок в среде 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
Большое спасибо
Я думаю, что я только нашел какое-то решение, я меняю контроллер 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
Вы также хотите удалить 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();
[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");
}