Tôi có lớp DBcontext đơn giản gọi là OdeToFoodDb:Entity Framework đối tượng null
public class OdeToFoodDb: DbContext
{
public DbSet<Restaurant> Restaurants { get; set; }
public DbSet<Review> Reviews { get; set; }
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Restaurant>()
.HasMany(resturant => resturant.Reviews)
.WithRequired(review => review.Resturant);
base.OnModelCreating(modelBuilder);
}
}
và định nghĩa lớp:
public class Restaurant
{
//public virtual int ID { get; set; }
public virtual int RestaurantId { get; set; }
public virtual string Name { get; set; }
public virtual Address Address { get; set; }
public virtual IList<Review> Reviews { get; set; }
}
public class Review : IValidatableObject
{
public int ReviewId { get; set; }
[DisplayName("Digning Date")]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
[DataType(DataType.Date)]
public DateTime Created { get; set; }
[Range(1, 10)]
public int Rating { get; set; }
[Required]
[DataType(DataType.MultilineText)]
public string Body { get; set; }
public int RestaurantId { get; set; }
public Restaurant Resturant { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var fields = new[]{ "Created"};
if(Created > DateTime.Now)
{
yield return new ValidationResult("Created date cannot be in the future.", fields);
}
if (Created < DateTime.Now.AddYears(-1))
{
yield return new ValidationResult("Created date cannot be to far in the past.", fields);
}
}
}
vấn đề của tôi là khi tôi chọn một bài đánh giá từ dbcontext như thế này:
OdeToFoodDb _db = new OdeToFoodDb();
public PartialViewResult LatestReview()
{
var review = _db.Reviews.FindTheLatest(1).Single();
//************************************
return PartialView("_Review", review);
}
tôi đã kiểm tra rằng review.Restaurant là null! trong khi tài sản khác có giá trị. Có gì sai với mã của tôi?
Bạn không bỏ lỡ đối tượng bao gồm đối tượng Nhà hàng trong truy vấn của mình? Tôi không chắc chắn những gì FindTheLatest đang làm nhưng điều này nên _db.Reviews.Include (r => r.Restaurant) .FindTheLatest (1) .Single() hoặc _db.Reviews.Include ("Nhà hàng"). FindTheLatest (1) .Single() – Khepri
@Khepri Tôi mới vào khung thực thể. Bạn có thể tập hợp phương pháp 'Bao gồm' nào không? –
Bao gồm tải thuộc tính điều hướng trong kết quả của bạn. Nếu bạn không bao gồm tuyên bố đó, kết quả cho thuộc tính điều hướng không được điền. – Khepri