在不同的控制器/方法中查询时丢失外键

时间:2018-01-28 17:06:29

标签: c# asp.net-mvc database foreign-keys

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

2 个答案:

答案 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));