我在ASP.Net 4.5 MVC项目中有一个模型租用。租赁有2个外键ProfileId(Profile Model)& ItemId(项目模型)。创建租赁记录时,两者都设置正确。
如果我运行控制器#1:
var rentals = GetRentals(6);
public IQueryable<Rental> GetRentals(int parent)
{
return db.Rentals.Where(t => t.ProfileId.Equals(parent));
}
var rentalArray = rentals.ToArray();
rentalArray有正确的项目ID和FK索引,允许我运行rentalArray [i] .Item.Name Good Response Pic from Code Above
现在在控制器#2中,如果我运行
var rentals = GetRentals(6);
public IQueryable<Rental> GetRentals(int parent)
{
return db.Rentals.Where(t => t.ProfileId.Equals(parent));
}
var rentalArray = rentals.ToArray();
在这个查询中,我松开了Rental的项目FK属性,尽管ItemId仍然正常进入。我无法运行rentalArray [i] .Item.Name作为Item为空。
两者都是相同的数据库记录,我只是在不同的控制器/方法中查询。 Picture of bad response
我无法确定为什么Rental.Item属性在第二个查询中为空? Database Diagram
租赁模式:
public class Rental
{
public int RentalId { get; set; }
public int ItemId { get; set; }
[IgnoreDataMember]
public virtual Item Item { get; set; }
public int ProfileId { get; set; }
[IgnoreDataMember]
public virtual Profile Profile { get; set; }
public DateTime RequestDate { get; set; }
public bool? Accepted { get; set; }
public bool? Complete { get; set; }
public DateTime BeginRental { get; set; }
public DateTime EndRental { get; set; }
public int ChargeAmount { get; set; }
public bool Canceled { get; set; }
public string ChargeId { get; set; }
}
答案 0 :(得分:0)
感谢bash.d发现问题。
你有没有注意到你的坏照片 LibLob.Models.Profile而不是对System.Data.Entity的引用 宾语?你说你的DBContext是一样的吗?
Controller#1正在使用ApplicationDBContext而控制器#2正在使用ProxylessApplicationDbContext,导致Rental.Item出现但在控制器#2中为null。通过添加第二个dbcontext并仅将其用于检索租用的方法来修复。
答案 1 :(得分:0)
您可以使用包含方法
using System.Data.Entity;
你可以像这样使用它: -
return db.Rentals.include(tt => tt.Profile).include(ttt => ttt.Item).Where(t => t.ProfileId.Equals(parent));