簡體   English   中英

包括不使用Entity Framework查詢

[英]Include not working with Entity Framework query

我不確定發生了什么變化,但是,在幾周前我回到我正在處理的應用程序之后,我的.Include()調用不再適用於我的一個相關表。 奇怪的是它適用於不同的表。 以下是一些代碼,其中的注釋顯示了我的結果:

//Get the order and nothing else.
using (OrderEntity orderContext = new OrderEntity(OrdersConnectionString)) {
    var query = from order in orderContext.ShippingOrders
                where order.ShipperId == shippingId
                select order;

    //I got a value!
    shippingOrder = query.ToList().FirstOrDefault();
}

//Get the line item and nothing else.
using (OrderEntity orderContext = new OrderEntity(OrdersConnectionString)) {
    var query = from orderItem in orderContext.ShippingOrderItems
                where orderItem.ShipperId == shippingId
                select orderItem;

    //I got a value!
    shippingOrderItems = query.ToList();
}

這是我困惑的地方:

//Get the order *AND* the line item
using (OrderEntity orderContext = new OrderEntity(OrdersConnectionString)) {
    var query = from order in orderContext.ShippingOrders.Include("ShippingOrderItems")
                where order.ShipperId == shippingId
                select order;

    //I get a ShippingOrder result, but no items are returned.  I used the SQL Server Profiler and saw the SQL that got executed; it contains the item, EF just isn't loading the object.
    shippingOrder = query.ToList().FirstOrDefault();
}

我能夠獲得不同相關表的結果。 這讓我覺得EF缺少我的訂單和訂單項表之間的關系,但是,我不知道如何解決這個問題。

編輯 :這是訂單實體

/// <summary>
/// No Metadata Documentation available.
/// </summary>
[EdmEntityTypeAttribute(NamespaceName="OrderModel", Name="ShippingOrder")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class ShippingOrder : EntityObject
{
    #region Factory Method

    /// <summary>
    /// Create a new ShippingOrder object.
    /// </summary>
    /// <param name="shipperId">Initial value of the ShipperId property.</param>
    public static ShippingOrder CreateShippingOrder(global::System.String shipperId)
    {
        ShippingOrder shippingOrder = new ShippingOrder();
        shippingOrder.ShipperId = shipperId;
        return shippingOrder;
    }

    #endregion
    #region Primitive Properties

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.String ShipperId
    {
        get
        {
            return _ShipperId;
        }
        set
        {
            if (_ShipperId != value)
            {
                OnShipperIdChanging(value);
                ReportPropertyChanging("ShipperId");
                _ShipperId = StructuralObject.SetValidValue(value, false);
                ReportPropertyChanged("ShipperId");
                OnShipperIdChanged();
            }
        }
    }
    private global::System.String _ShipperId;
    partial void OnShipperIdChanging(global::System.String value);
    partial void OnShipperIdChanged();

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
    [DataMemberAttribute()]
    public global::System.String OrderNumber
    {
        get
        {
            return _OrderNumber;
        }
        set
        {
            OnOrderNumberChanging(value);
            ReportPropertyChanging("OrderNumber");
            _OrderNumber = StructuralObject.SetValidValue(value, true);
            ReportPropertyChanged("OrderNumber");
            OnOrderNumberChanged();
        }
    }
    private global::System.String _OrderNumber;
    partial void OnOrderNumberChanging(global::System.String value);
    partial void OnOrderNumberChanged();

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
    [DataMemberAttribute()]
    public Nullable<global::System.DateTime> OrderDate
    {
        get
        {
            return _OrderDate;
        }
        set
        {
            OnOrderDateChanging(value);
            ReportPropertyChanging("OrderDate");
            _OrderDate = StructuralObject.SetValidValue(value);
            ReportPropertyChanged("OrderDate");
            OnOrderDateChanged();
        }
    }
    private Nullable<global::System.DateTime> _OrderDate;
    partial void OnOrderDateChanging(Nullable<global::System.DateTime> value);
    partial void OnOrderDateChanged();

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
    [DataMemberAttribute()]
    public global::System.String CustomsComment
    {
        get
        {
            return _CustomsComment;
        }
        set
        {
            OnCustomsCommentChanging(value);
            ReportPropertyChanging("CustomsComment");
            _CustomsComment = StructuralObject.SetValidValue(value, true);
            ReportPropertyChanged("CustomsComment");
            OnCustomsCommentChanged();
        }
    }
    private global::System.String _CustomsComment;
    partial void OnCustomsCommentChanging(global::System.String value);
    partial void OnCustomsCommentChanged();

    #endregion

    #region Navigation Properties

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [XmlIgnoreAttribute()]
    [SoapIgnoreAttribute()]
    [DataMemberAttribute()]
    [EdmRelationshipNavigationPropertyAttribute("OrderModel", "FK_ShippingOrderItem_ShippingOrder", "ShippingOrderItem")]
    public EntityCollection<ShippingOrderItem> ShippingOrderItems
    {
        get
        {
            return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<ShippingOrderItem>("OrderModel.FK_ShippingOrderItem_ShippingOrder", "ShippingOrderItem");
        }
        set
        {
            if ((value != null))
            {
                ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<ShippingOrderItem>("OrderModel.FK_ShippingOrderItem_ShippingOrder", "ShippingOrderItem", value);
            }
        }
    }

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [XmlIgnoreAttribute()]
    [SoapIgnoreAttribute()]
    [DataMemberAttribute()]
    [EdmRelationshipNavigationPropertyAttribute("OrderModel", "FK_ShippingOrderItemTracking_ShippingOrder", "ShippingOrderTracking")]
    public EntityCollection<ShippingOrderTracking> ShippingOrderTrackings
    {
        get
        {
            return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<ShippingOrderTracking>("OrderModel.FK_ShippingOrderItemTracking_ShippingOrder", "ShippingOrderTracking");
        }
        set
        {
            if ((value != null))
            {
                ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<ShippingOrderTracking>("OrderModel.FK_ShippingOrderItemTracking_ShippingOrder", "ShippingOrderTracking", value);
            }
        }
    }

    #endregion
}

我仍然不確定問題的原因是什么。 我決定放棄我的數據庫並重新創建我的表(以及主鍵和外鍵)並再次遷移所有數據。 它實際上修復了它,但是,我不確定最終會有什么不同。 我沒有記錄任何異常,並且基於SQL Server Profiler,它看起來正在執行正確的查詢。

你也可以試試這個:

if (Order.shippingId != null && Order.shippingId > 0)
    orderContext.LoadProperty(Orders, Order => Order.ShippingOrderItems);

這將獲取ShippingOrderItems中的匹配訂單ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM