2014-12-07 5 views
1

Я действительно не знаю, почему он продолжает возвращать null, даже если значение действительно существует. Мне нужна ваша помощь моего контрольMVC 4 Возвращает null даже значение существует в базе данных

public ActionResult DeleteConfirmed(int id) 
    { 
     User user = db.Users.Find(id); 
     var orders = db.Orders// 1ng co nhieu hoadon 
      .Where(h => h.USERID == id).ToList(); 

     if (orders != null)//each order has detail order, find them and delete 
     { 
      foreach (Order order in orders) 
      { 
       var detailorders = db.DetailOrders 
        .Where(detailorder => detailorder.OrderID == order.OrderID).ToList();// Return Null here 
       foreach (DetailOrder o in detailorders) 
        db.DetailOrders.Remove(o); 

       db.Orders.Remove(order); 
      } 
     } 



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

Я не знаю, почему detailorders возвращает нуль, помогите мне. моя модель:

public Order() 
    { 
     this.DetailOrders = new HashSet<DetailOrder>(); 
    } 

    public int OrderID { get; set; } 
    public Nullable<int> USERID { get; set; } 


    public virtual ICollection<DetailOrder> DetailOrders { get; set; } 
    public virtual User User { get; set; } 

и моя модель DetailOrder. Я с помощью EntiyFramework 5.0.0.0

public partial class DetailOrder 
{ 


    public int OrderID { get; set; } //Primary Key 
    public int ProductID { get; set; }// Primary Key 


    public virtual Order Order { get; set; } 
    public virtual Product Product{ get; set; } 

} 
+0

Что возвращает null? –

+0

Ваш вопрос непонятен. какой метод возвращает null, какова структура таблицы и ее содержимое ... вы пытались выбрать все без чего? – Dani

+0

Я ДЕЙСТВИТЕЛЬНО НУЖНА ПОМОЩЬ. –

ответ

0

Я не вижу здесь проблемы, но я предлагаю другой путь для того, чтобы пропустить весь этот код и вместо цикла по заказам & детали заказа, вам необходимо удалить только приказ.

, если вы не можете из-за конкретного проектного решения, проблему можно решить, разрешив CascadeDelete внутри вашей БД. таким образом, всякий раз, когда вы удаляете заказ, сама БД позаботится о том, чтобы удалить все дочерние детали DetailsOrder для вас, и вы пропустите головную боль здесь.

способ включения cascadeDelete показано на скриншоте ниже:

  1. Открыть DetailsOrder в режиме «Дизайн»
  2. Open «Отношения»
  3. разверните параметр «INSERT и UPDATE спецификации»
  4. Выберите «Каскад» для опции «Удалить правило»
  5. Хит «Ok» и сохраните таблицу

enter image description here Теперь всякий раз, когда вы удаляете заказ, все связанные детали detailOrders также будут удалены, все обрабатывается вашей БД.

+2

он прекрасно работает, так что вы спасатель жизни. Я действительно ценю вашу помощь! –

+0

приветствуется :) –

Смежные вопросы