Ошибка, связанная с Entity Framework, .NET4, MVC3

#asp.net-mvc-3 #.net-4.0

#asp.net-mvc-3 #.net-4.0

Вопрос:

Я новичок в этой платформе. Так что я не очень хорошо знаком со всей терминологией.
Я получаю сообщение об ошибке :

Указанный путь включения недопустим. Тип объекта ‘ERP.Модели.OpeningBalance’ не объявляет свойство навигации с именем ‘AccountHeadId’.

Здесь я получил класс модели ‘OpeningBalance’ в проекте ‘ERP’

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace ERP.Models.Account
{
    public class OpeningBalance
    {

        [Key]
        public int OpenningBalanceId { get; set; }

        [Required(ErrorMessage = "The {0} cannot be left blank.")]
        [Display(Name = "Openning Balance Date")]
        [DataType(DataType.Date)]
        [DisplayFormat(NullDisplayText = "", DataFormatString = "{0:dd-MM-yyyy}")]
        public DateTime OpenningBalanceDate { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} cannot be left blank.")]
        [Display(Name = "AccountHeadId")]
        public int AccountHeadId { get; set; }
        public virtual ChartOfAccount ChartOfAccount { get; set; }


    }
}
 

Разве это не public int AccountHeadId { get; set; } есть

свойство навигации с именем «AccountHeadId»

?
Ошибка источника показывает строки из контроллера :

     var openingBalances = db.OpeningBalances.Include(o => o.AccountHeadId);
    return View(openingBalances.ToList());  
 

Я много искал в Интернете, включая все связанные вопросы в stackoverflow, затем попробовал следующую форму:

 var openingBalances = from o in db.OpeningBalances.Include(o=>o.AccountHeadId) select o;  
return View(openingBalances.ToList());
 

Это тоже не сработало. У кого-нибудь есть какие-нибудь идеи?

Ответ №1:

Это AccountHeadId свойство не является навигационным свойством. Навигационное свойство должно иметь тип another entity , например , ChartOfAccount или entity collection , например ICollection<ChartOfAccount> .

Если скалярное свойство AccountHeadId связано с навигационным свойством ChartOfAccount , включите ChartOfAccount его в свой запрос.

 var openingBalances = db.OpeningBalances.Include(o => o.ChartOfAccount);
 

Вы используете Include метод для нетерпеливой загрузки связанных объектов, чтобы избежать многократного обращения к базе данных. Примитивные свойства, такие как AccountHeadId будут загружаться всегда, когда вы извлекаете объект, содержащий такие свойства.