2017-05-26 23 views
0

我有這樣的代碼:「對象引用不設置爲一個對象的一個​​實例,」上導航屬性

IQueryable<Dealer> dealers = db.Dealers.Include(x => x.Statuses); 
this.view.Table = dealers 
    .Select(x => new DealerRow 
    { 
     Id = x.Id, 
     LastStatus = x.Statuses.FirstOrDefault() 
    }) 
    .ToList(); 

和與this.view.Table = dealers開始是其中該異常發生的行:

對象未將引用設置爲對象的實例。

堆棧跟蹤如下:

[NullReferenceException: Object reference not set to an instance of an object.] 
    MySql.Data.Entity.SelectStatement.AddDefaultColumns(Scope scope) +293 
    MySql.Data.Entity.SelectStatement.Wrap(Scope scope) +36 
    MySql.Data.Entity.SelectGenerator.Visit(DbApplyExpression expression) +236 
    System.Data.Entity.Core.Common.CommandTrees.DbApplyExpression.Accept(DbExpressionVisitor`1 visitor) +64 
    MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +32 
    MySql.Data.Entity.SelectGenerator.HandleJoinExpression(DbExpressionBinding left, DbExpressionBinding right, DbExpressionKind joinType, DbExpression joinCondition) +77 
    MySql.Data.Entity.SelectGenerator.Visit(DbJoinExpression expression) +48 
    System.Data.Entity.Core.Common.CommandTrees.DbJoinExpression.Accept(DbExpressionVisitor`1 visitor) +64 
    MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +32 
    MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +22 
    MySql.Data.Entity.SelectGenerator.Visit(DbSortExpression expression) +76 
    System.Data.Entity.Core.Common.CommandTrees.DbSortExpression.Accept(DbExpressionVisitor`1 visitor) +64 
    MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +32 
    MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +22 
    MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression expression) +53 
    System.Data.Entity.Core.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1 visitor) +64 
    MySql.Data.Entity.SelectGenerator.GenerateSQL(DbCommandTree tree) +68 
    MySql.Data.MySqlClient.MySqlProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree) +328 
    System.Data.Entity.Core.Common.DbProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree, DbInterceptionContext interceptionContext) +13 
    System.Data.Entity.Core.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree, DbInterceptionContext interceptionContext) +127 
    System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition..ctor(DbProviderFactory storeProviderFactory, DbCommandTree commandTree, DbInterceptionContext interceptionContext, IDbDependencyResolver resolver, BridgeDataReaderFactory bridgeDataReaderFactory, ColumnMapFactory columnMapFactory) +1420 
    System.Data.Entity.Core.EntityClient.Internal.EntityProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree, DbInterceptionContext interceptionContext) +103 
    System.Data.Entity.Core.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree, DbInterceptionContext interceptionContext) +127 
    System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlanFactory.CreateCommandDefinition(ObjectContext context, DbQueryCommandTree tree) +151 
    System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlanFactory.Prepare(ObjectContext context, DbQueryCommandTree tree, Type elementType, MergeOption mergeOption, Boolean streaming, Span span, IEnumerable`1 compiledQueryParameters, AliasGenerator aliasGenerator) +161 
    System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption) +1027 
    System.Data.Entity.Core.Objects.<>c__DisplayClass7.<GetResults>b__6() +39 
    System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction(Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) +288 
    System.Data.Entity.Core.Objects.<>c__DisplayClass7.<GetResults>b__5() +155 
    System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute(Func`1 operation) +9 
    System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +281 
    System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() +11 
    System.Data.Entity.Internal.LazyEnumerator`1.MoveNext() +45 
    System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +387 
    System.Linq.Enumerable.ToList(IEnumerable`1 source) +58 
    DealersPresenter.RefreshTable() in File1.cs:98 
    DealersListPage.Filter(Object sender, EventArgs e) in File2.aspx.cs:37 
    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9659822 
    System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108 
    System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12 
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15 
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639 

具體地,如果我從註釋掉LastStatus的選擇程序編譯和運行完美。所以我假設Statuses是這裏的問題。

的一對多的關係是建立這樣的:

[Table("dealers")] 
public class Dealer 
{ 

    public Dealer() 
    { 
     Statuses = new List<DealerStatus>(); 
    } 

    [Key] 
    [Column("id")] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public virtual ICollection<DealerStatus> Statuses { get; set; } 

} 

和:

[Table("dealer_statuses")] 
public class DealerStatus 
{ 

    [Key] 
    [Column("id")] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    [Required] 
    [ForeignKey("Dealer")] 
    [Column("id_dealer")] 
    public int DealerId { get; set; } 
    public virtual Dealer Dealer { get; set; } 

    [Required] 
    [Column("note")] 
    public string Note { get; set; } 

} 

我讀過有關它的其他5個問題。我試過打電話Include和類似。我也檢查過Dealer的默認構造函數初始化一個空列表。

什麼導致此異常?

+0

如果將第一行更改爲db.Dealers.Include(x => x.Statuses).ToList(); ? – Fabiano

+0

@Fabiano添加行「db.Dealers.Include(x => x.Statuses).ToList();」在其他事情之前不會觸發異常。 – Shoe

+0

難道是因爲關鍵屬性不叫DealerId而只是Id?遵循[this](http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx)引用它是我看到的唯一區別。 – Shoe

回答

0

試圖從集合中刪除virtual後,和其他種類的預先加載的,我搬到了SelectToList調用(這將熱切加載一切),但至少它可以編譯和運行。

更新到最新的6.9.9 MySql.Data.Entity也沒有爲我工作。

相關問題