Ich habe einfach DbContext Klasse namens OdeToFoodDb:Entity Framework Null-Objekt
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);
}
}
und die Klassendefinition:
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);
}
}
}
mein Problem ist, wenn ich eine Bewertung von DbContext wie folgt wählen:
OdeToFoodDb _db = new OdeToFoodDb();
public PartialViewResult LatestReview()
{
var review = _db.Reviews.FindTheLatest(1).Single();
//************************************
return PartialView("_Review", review);
}
Ich habe überprüft, dass die Bewertung. Restaurant ist null! während die andere Eigenschaft einen Wert hat. Was ist falsch an meinem Code?
Fehlt Ihnen in Ihrer Anfrage kein Include des Restaurant-Objekts? Ich bin nicht sicher, was FindTheLatest tut, aber das sollte _db.Reviews.Include sein (r => r.Restaurant) .FindTheLatest (1) .Single() oder _db.Reviews.Include ("Restaurant"). FindTheLatest (1) .Single() – Khepri
@Khepri Ich bin neu im Entity-Framework. Können Sie die "Include" -Methode anwenden? –
Include lädt die Navigationseigenschaft in Ihr Ergebnis. Wenn Sie diese Anweisung nicht einschließen, werden die Ergebnisse für die Navigationseigenschaft nicht ausgefüllt. – Khepri