【问题标题】:A specified Include path is not valid. The EntityType ' ' does not declare a navigation property with the name ' ' [duplicate]指定的包含路径无效。 EntityType“ ”未声明名为“ ”的导航属性[重复]
【发布时间】:2015-10-09 15:05:47
【问题描述】:

所以我在 SQL Server 上的表有 2 个表

dbo.Account

AccountID   AccountStatusID ...
  1234             1   
  4321             2
  ....

dbo.validAccountStatus

AccountStatusID   AccountStatus
       1            Terminated
       2            Active
     ....

在帐户索引页面上,我想显示状态而不是状态 ID,如下所示:

AccountID   AccountStatusID ...
  1234        Terminated 
  4321        Active
  ....

我不断收到此错误:

System.InvalidOperationException: A specified Include path is not valid. The EntityType 'BAMSQLDBModel.Account' does not declare a navigation property with the name 'validAccountStatus'

我在做数据库优先。

模型

Account.cs
public partial class Account
{
   public int AccountID { get; set; }
   [Display(Name = "Account Status ID")]
   public int AccountStatusID { get; set; }

   public virtual validAccountStatus validAccountStatus { get; set; }
}

validAccountStatus.cs
public partial class validAccountStatus
{
    [Key]
    public int AccountStatusID { get; set; }
    [Display(Name = "Account Status")]
    public string AccountStatus { get; set; }

    public virtual Account Account { get; set; }
}

上下文

public partial class BAMSQLDB : DbContext
{
     public BAMSQLDB()
            : base("name=BAMSQLDB")
     {
     }

     public virtual DbSet<Account> Accounts { get; set; }
     public virtual DbSet<validAccountStatus> validAccountStatus { get; set; }


     protected override void OnModelCreating(DbModelBuilder modelBuilder)
     {           
        modelBuilder.Entity<Account>()
             .HasRequired(a => a.validAccountStatus).WithRequiredPrincipal(aS => aS.Account);
     }
}

控制器(我正在使用 PagedList.MVC 进行分页)

public ActionResult Index(int? page)
{
     var accounts = from acc in db.Accounts select acc;
     accounts = accounts.Include(accSt => accSt.validAccountStatus);

     accounts = accounts.OrderBy(acc => acc.AccountName);

     int pageSize = 20;
     int pageNumber = (page ?? 1);

     return View(accounts.ToPagedList(pageNumber, pageSize));
}

【问题讨论】:

    标签: c# entity-framework navigation-properties


    【解决方案1】:

    尝试将 DataAnnotation 添加到您的 Account 类

    Account.cs

    public partial class Account
    {
       public int AccountID { get; set; }
       [Display(Name = "Account Status ID")]
       public int? AccountStatusID { get; set; }
       /* HERE */       
       [ForeignKey("AccountStatusID")] 
       public virtual validAccountStatus validAccountStatus { get; set; }
    }
    

    我认为您需要将帐户导航更改为列表,因为每个 validAccountStatus 都可以链接到多个帐户中,对吗?

    validAccountStatus.cs

    public partial class validAccountStatus
    {
        [Key]
        public int AccountStatusID { get; set; }
        [Display(Name = "Account Status")]
        public string AccountStatus { get; set; }
    
        public virtual List<Account> Accounts { get; set; }
    }
    

    控制器的变化

    public ActionResult Index(int? page)
    {
         IQueyable<Account> accounts = from acc in db.Accounts select acc;
         accounts = accounts.Include(accSt => accSt.validAccountStatus);
    
         accounts = accounts.OrderBy(acc => acc.AccountName);
    
         int pageSize = 20;
         int pageNumber = (page ?? 1);
    
         return View(accounts.ToPagedList(pageNumber, pageSize));
    }
    

    【讨论】:

    • 仍然收到该错误。我打开了数据库图,Account 和validAccountStatus 中的导航属性字段仍然是空白的。但是非常感谢您指出 Accounts 应该是 validAccountStatus 中的列表。
    • 我尝试了 2 次:一次。将 IndexAction var account 更改为 IQueyable&lt;Account&gt; account。二。创建一个带有连接表 validAccountStatus 的 Linq。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多