从数据库中检索数据时,我有一个空值,如何解决此问题



首先,我正在使用ASP.NET MVC 5框架。我试图访问投标模型类并在数据库中检索我的用户名。但这是不起作用的。

这是我的拍卖控制器 - (我评论了需要更改的区域(

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

这是我的拍卖模型

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

这是我的出价模型

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

请帮助我解决这个问题..我受到了很多尝试,但我仍然无法弄清楚。这是我尝试的第四天。请帮助我...

这是ActionResult BIDS部分中的位置出现null值

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

这是需要更改的,但是我不知道如何改变这种变化,我尝试了不同的方法。但是它不起作用...

我要做的是:

(简而言之,我想在此处进行竞标模型 - 我被定义了一个用户名。因此,我想检索参考出价ID的值(

(

,但我尝试了几次以获取出价模型中的用户名,但是"结果"变量始终为null ...

我被试图通过拍卖ID并检索列表,但相同...(

(

我附上了一些我希望它会给您一些信息的图片。请帮助我

检查指向对象的详细信息 - " i.stack.imgur.com/ecd25.png"

拍卖数据库

出价数据库

谢谢....

在此行中,您使用拍卖。但是我看到您没有通过1到许多关系来设计模型。因此,当您尝试致电时,您的投标必须为null。

我的建议1:您必须使用EntityFramework的自动收藏的许多关系cahnge您的模型。

2:或者您必须这样更新代码:

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

因此,从直接到DB上下文查询。不拍卖收集。因为它在此设计中会无效。(直到加载(

我的建议是调试方法,看看问题是否与数据相关。这样,您就可以知道查找是否由于数量和/或字符串转换而失败。

因此,首先尝试将行更改为一条:

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

如果起作用,请添加量过滤器:

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

我的直觉告诉我,这是因为,因为字符串转换仍然应该工作。

编辑:

阅读问题后,可能是您的虚拟集合并没有急切地加载,请尝试使用Incless,这迫使查询查找嵌套实体。

尝试这个:

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

有关Inclubly的更多信息,您可以在MSDN

中阅读更多信息。

最新更新