2012-07-16 15 views
6

Neyin değiştiğinden emin değilim, ancak birkaç hafta önce bir uygulamaya geri döndükten sonra, .Include() aramamla ilgili tablolarımdan biri için artık çalışmıyor. Garip bölüm, farklı bir tablo için çalışıyor olmasıdır. Kafam karışık İşte buradaEntity Framework sorgusuyla çalışmaya dahil etmeme

//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(); 
} 

edilir:

//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(); 
} 

Farklı İlgili tablo için sonuçları geri almak mümkün Buradayım yorumlar benim sonuçlarının neler gösteren bazı kodudur. Bu, EF'in siparişimle satır öğesi tablosu arasındaki ilişkiyi kaçırdığını düşünmeme neden oluyor, ancak bunu nasıl düzeltebileceğimi bilmiyorum.

Düzenleme: İşte yine sorunun nedeni ne olduğundan emin değilim al Varlık

/// <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 
} 
+0

Uzun çekim ... ShippingOrderItem sınıfında boş bir kurucunuz var mı? – Phil

+0

ShippingOrder varlığını yayınlayabilir misiniz? ShippingOrderItem'in özelliği (ve yapılandırması) adı nedir? –

+0

@PhilCartmell - Sadece bir FYI: Otomatik olarak oluşturulan kodu kullanıyorum (veritabanı-önce). Sınıfa baktım ve bir kurucu yok, C# sihiri beni boş bir kurucu ile bırakıyor. –

cevap

1

olduğunu. Veritabanımı bırakıp, tablolarımı (birincil ve yabancı anahtarlar ile birlikte) yeniden oluşturmaya ve tüm verileri yeniden aktarmaya karar verdim. Aslında düzeltdi, ama ne kadar farklı olduğuna emin değilim. Herhangi bir özel durum alışılamadım ve SQL Server Profiler'e dayanarak doğru sorgunun yürütülmesi gibi görünüyordu.

+0

Bu cevabı kabul etmediğin herhangi bir sebep var mı? –

+0

@ShadowWizard - Geri gelmek ve bunu bir cevap olarak kabul etmek istedim.Çok teşekkürler –

+0

Lol .. geç olması hiç olmamasından daha iyi! :) –

1

Ayrıca bu deneyebilirsiniz:

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

Bu ShippingOrderItems eşleşen sipariş id alması için yeterlidir.