从数据库中检索数据时,我得到了一个空值,如何解决这个问题?
When Retrieving data from the database, I have got a null value, How to fix this?
首先,我使用的是ASP.net MVC 5 Framework。我试图访问投标模型 class 并在数据库中检索我的用户名。但这是行不通的。
这是我的拍卖控制器 - (我评论了需要更改的区域)
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;
}
}
}
请帮我解决这个问题..我尝试了很多,但我还是想不通..这是我尝试的第4天..请帮助我...
这是ActionResult出价部分出现空值的地方
var result = auction.Bids.Where(c => c.AuctionId.ToString() == bid.AuctionId.ToString()&&c.Amount> bid.Amount);
这需要更改,但我不知道如何更改,我尝试了不同的方法..但它不起作用...
我想做的是:
(只是我想在这里做,在投标模型中 - 我被定义了一个用户名部分。所以,我想检索引用投标 ID 的值)
但是我尝试了几次在出价模型中获取用户名,但是"result"变量总是空...
我试图传递拍卖ID并检索列表,但它是一样的......:(
附上一些图片希望能给大家一些信息..
请帮帮我
检查指向对象的详细信息 - "i.stack.imgur.com/Ecd25.png"
Auction database
Bid Database
谢谢....
我的建议是调试方法,看看问题是否与数据有关。这样你就可以知道查找是否因为数量 and/or 字符串转换而失败。
所以首先尝试使用将线路更改为这一行:
var result = auction.Bids.Where(c => c.AuctionId == bid.AuctionId);
如果可行,则添加金额过滤器:
var result = auction.Bids.Where(c => c.AuctionId == bid.AuctionId && c.Amount > bid.Amount);
我的直觉告诉我这是因为 Amount,因为字符串转换虽然不必要但应该仍然有效。
编辑:
经过一些阅读,问题可能是您的虚拟集合没有被急切加载,请尝试使用 include,它会强制查询查找嵌套实体。
试试这个:
var auction = db.Auctions.Include(a => a.Bids).SingleOrDefault(a => a.Id == bid.AuctionId);
有关包含的更多信息,您可以在 msdn
中阅读更多内容
在这一行中,您使用 auction.Bids 就像 EntityFramework collection 一样。但是我看到您没有设计具有一对多关系的模型。
因此,当您尝试调用时,您的出价必须为空。
我的建议 1:您必须为 1 对多关系更改模型,以便使用 EntityFramework 进行自动 Collections 延迟加载。
2:或者您必须像这样更新您的代码:
db.Bids.Where(c => c.AuctionId == bid.AuctionId && c.Amount> bid.Amount);
因此,直接查询数据库上下文。未拍卖 collection。因为在本设计中它将为空。 (直到你加载)
首先,我使用的是ASP.net MVC 5 Framework。我试图访问投标模型 class 并在数据库中检索我的用户名。但这是行不通的。
这是我的拍卖控制器 - (我评论了需要更改的区域)
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;
}
}
}
请帮我解决这个问题..我尝试了很多,但我还是想不通..这是我尝试的第4天..请帮助我...
这是ActionResult出价部分出现空值的地方
var result = auction.Bids.Where(c => c.AuctionId.ToString() == bid.AuctionId.ToString()&&c.Amount> bid.Amount);
这需要更改,但我不知道如何更改,我尝试了不同的方法..但它不起作用...
我想做的是:
(只是我想在这里做,在投标模型中 - 我被定义了一个用户名部分。所以,我想检索引用投标 ID 的值)
但是我尝试了几次在出价模型中获取用户名,但是"result"变量总是空...
我试图传递拍卖ID并检索列表,但它是一样的......:(
附上一些图片希望能给大家一些信息.. 请帮帮我
检查指向对象的详细信息 - "i.stack.imgur.com/Ecd25.png"
Auction database
Bid Database
谢谢....
我的建议是调试方法,看看问题是否与数据有关。这样你就可以知道查找是否因为数量 and/or 字符串转换而失败。
所以首先尝试使用将线路更改为这一行:
var result = auction.Bids.Where(c => c.AuctionId == bid.AuctionId);
如果可行,则添加金额过滤器:
var result = auction.Bids.Where(c => c.AuctionId == bid.AuctionId && c.Amount > bid.Amount);
我的直觉告诉我这是因为 Amount,因为字符串转换虽然不必要但应该仍然有效。
编辑:
经过一些阅读,问题可能是您的虚拟集合没有被急切加载,请尝试使用 include,它会强制查询查找嵌套实体。
试试这个:
var auction = db.Auctions.Include(a => a.Bids).SingleOrDefault(a => a.Id == bid.AuctionId);
有关包含的更多信息,您可以在 msdn
中阅读更多内容在这一行中,您使用 auction.Bids 就像 EntityFramework collection 一样。但是我看到您没有设计具有一对多关系的模型。 因此,当您尝试调用时,您的出价必须为空。
我的建议 1:您必须为 1 对多关系更改模型,以便使用 EntityFramework 进行自动 Collections 延迟加载。
2:或者您必须像这样更新您的代码:
db.Bids.Where(c => c.AuctionId == bid.AuctionId && c.Amount> bid.Amount);
因此,直接查询数据库上下文。未拍卖 collection。因为在本设计中它将为空。 (直到你加载)