2017-04-30 2 views
1

Erstens, ich benutze ASP.net MVC 5 Framework. Ich wurde versucht, auf die Bid Model-Klasse zuzugreifen und meinen Benutzernamen in der Datenbank abzurufen. Aber es ist keine Arbeit.Beim Abrufen von Daten aus der Datenbank habe ich einen Nullwert, wie Sie das beheben können?

Hier meine Auktion Controller ist - (I kommentierte den Bereich, der sich ändern müssen)

  var result = auction.Bids.Where(c => c.AuctionId.ToString() == bid.AuctionId.ToString()&&c.Amount> bid.Amount); 
      //I want to get my username in bids model, but it is not retrieving........................................ 
      if (result.Equals(null)) 
       { 

        TempData["Hello"] = "Sorry the bid has been expired!"; 
         return RedirectToAction("Auction", new { id = bid.AuctionId }); 
       } 
       else 
       { 
        TempData["Hello"] = "Bid has a won person"; 

        return RedirectToAction("Auction", new { id = bid.AuctionId }); 
       } 
       //TempData["Hello"] = "This bid has expired!"; 


     } 
     else 
     { 
      var result = db.Bids.Where(c => c.AuctionId.Equals(bid.AuctionId)); 
      if (result.Equals(" ")) 
      { 
       TempData["Hello"] = "Sorry the bid has been expired!"; 
       return RedirectToAction("Auction", new { id = bid.AuctionId }); 
      } 
      else 
      { 
       TempData["Hello"] = "Bid has a won person"; 
       return RedirectToAction("Auction", new { id = bid.AuctionId }); 
      } 
      //TempData["Hello"] = "This bid has expired!"; 

     } 

Hier ist meine Auktion Modell

using System; 
    using System.Collections.Generic; 
    using System.Collections.ObjectModel; 
    using System.ComponentModel.DataAnnotations; 
    using System.ComponentModel.DataAnnotations.Schema; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 

    namespace Samurai.Models 
    { 
     public class Auction 
     { 
      [Key] 
      [Required] 
      public long Id { get; set; } 


      public virtual Collection<Bid> Bids { get; private set; } 

      public int BidCount 
      { 
       get { return Bids.Count; } 
      } 
      public Auction() 
      { 
       Bids = new Collection<Bid>(); 
       CurrentPrice = 0; 

      } 
     } 
    } 

Hier ist mein Gebotsmodell

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Samurai.Models 
{ 
    public class Bid 
    { 
     [Key] 
     [Required] 
     public long Id { get; internal set; } 

     [Required] 
     public long AuctionId { get; set; } 

     [Required] 
     public string Username { get; set; } 

     [Required] 
     [Range(1, double.MaxValue)] 
     public decimal Amount { get; set; } 

     public Bid() 
     { 
      Timestamp = DateTime.Now; 
     } 
    } 
} 

Bitte helfen Sie mir, diese zu lösen .. Ich bin so viel versucht, aber noch kann ich dachte, es nicht out..this ist der 4. Tag, dass ich versuche .. bitte helfen Sie mir ...

Dies ist der Ort, in Action Gebote Abschnitt Nullwert

var result = auction.Bids.Where(c => c.AuctionId.ToString() == bid.AuctionId.ToString()&&c.Amount> bid.Amount); 

dies ändern müssen, aber ich weiß nicht, scheint, wie dies zu ändern, ich verschiedenen ways..but versucht, es nicht funktioniert. ..

Was ich versuche ist:

(Einfach ich versuche, hier zu tun, in Gebotsmodell - I definiert einen Benutzernamen Abschnitt. Also, ich möchte den Wert abzurufen, die sich auf das Angebot id)

Aber ich versuchte mehrmals, den Benutzernamen im Angebot Modell zu erhalten, aber „führen“ Variable immer null ...

ich habe versucht, die Auktion ID passieren und die Liste abzurufen, aber es ist die gleiche ... :(

ich ein paar Bilder beigefügt, die ich hoffe, es wird noch einige Informationen, die Ihnen geben .. Bitte helfen Sie mir

Details prüfen po inting zum Objekt - "i.stack.imgur.com/Ecd25.png"

Auction database

Bid Database

Danke ....

+0

Haben Sie überprüft, dass die AuctionId im Modell übergeben wird? 1- warum nicht Html.HiddenFor (in Teilansicht, wenn das Modell der Ansicht ist anders, um Tippfehler zu vermeiden, plus seine besser organisiert) @ Html.Hidden ("auctionId", auction.Id) 2- überprüfen Sie die Werte der Wo sind die Bedingungen, sind sie richtig? –

+0

@SaadAlothman - ja sie sind korrekt –

+0

AuctionId funktioniert auch, perfekt, nur Problem var Ergebnis Abschnitt in der Steuerung –

Antwort

0

in dieser Linie Gebrauch auction.Bids wie EntityFramework Sammlungen Sie war zu lesen. Aber ich sehe, dass du deine Models nicht mit 1 zu vielen Beziehungen entworfen hast. Aus diesem Grund müssen Ihre Gebote null sein, wenn Sie versuchen, anzurufen.

Mein Tipp 1: Sie müssen Ihr Modell für 1 bis viele Beziehungen für automatische Sammlungen Lazy Load mit EntityFramework ändern.

2: oder müssen Sie Ihren Code wie folgt aktualisiert:

db.Bids.Where(c => c.AuctionId == bid.AuctionId && c.Amount> bid.Amount); 

so, Abfrage von direkt Kontext db. nicht auf Auktionssammlung. Weil es in diesem Design null sein wird. (bis Sie laden)

+0

Ich versuchte, aber das gleiche Problem :( –

+0

Ich aktualisierte einige angehängte Bilder, einen Blick :) Danke für Anregungen, ich schätze :) –

+0

ok. neue Verbesserung. – wikiCan

0

Meine Empfehlung ist, zu debuggen die Methode und sehen, ob das Problem datenbezogen ist. Auf diese Weise können Sie wissen, ob das Nachschlagen aufgrund der Menge und/oder der String-Konvertierung fehlschlägt.

Also zuerst versuchen, die Linie auf diese eine mit Wechsel:

var result = auction.Bids.Where(c => c.AuctionId == bid.AuctionId); 

Wenn es den Betrag Filter fügen Sie dann funktioniert:

var result = auction.Bids.Where(c => c.AuctionId == bid.AuctionId && c.Amount > bid.Amount); 

mich Mein Bauch wegen der Betrag es sagt, wie die String-Konvertierung, obwohl unnötig, sollte immer noch funktionieren.

EDIT:

Nachdem einige das Problem lesen kann sein, dass Ihre virtuelle Sammlung wird nicht mit Spannung geladen werden, versuchen Sie umfassen die Verwendung, die die Abfrage erzwingt für die verschachtelte Einheit zu suchen.

Versuchen Sie dieses:

var auction = db.Auctions.Include(a => a.Bids).SingleOrDefault(a => a.Id == bid.AuctionId); 

Weitere Informationen zu enthalten, die Sie mehr in msdn

+0

Ich wurde versucht beide Wege, aber es ist Null sagt (immer noch nicht möglich :( –

+0

Ich habe ein paar Bilder aktualisiert, schauen Sie :) Danke für Anregungen, ich schätze :) –

+0

@SumedhaWarakagoda Sehen Sie die Bearbeitung und prüfen, ob das das Problem ist. –

Verwandte Themen