isakavis
isakavis

Reputation: 785

Navigation property is null while calling WCF method

I have the following code that is layered as below:

  1. Data - DbContext database access.
  2. Entities - POCO entities with INotifyPropertyChanged
  3. WCF Service - Uses Data and Entities
  4. Test Library

Here is the code from test method.

        SalesOrder order = new SalesOrder();
        order.CustomerID = 1;
        order.OrderDate = DateTime.Now;
        order.SalesTax = 5.60M;
        order.ShipCharge = 5.00M;
        order.DiscountPercent = 20;
        order.ModifiedByUser = Environment.UserName;
        order.CreatedByUser = Environment.UserName;

        SalesOrderDetail detail = new SalesOrderDetail();
        detail.SalesOrder = order;
        detail.OrderID = order.OrderID;
        detail.OrderQuantity = 15;
        detail.UnitPrice = 20;
        detail.Description = "Test";
        detail.ModifiedByUser = Environment.UserName;
        detail.CreatedByUser = Environment.UserName;
        order.SalesOrderDetails.Add(detail);

        order = _service.SaveOrder(order);

order.SalesOrderDetails has one item at this time. But when it reaches the WCF method, order.SalesOrderDetails has a count of 0.

Here is my SalesOrder class and SalesOrderDetail class

public partial class SalesOrder: EntityBase
{

    public SalesOrder()
    {
        this.SalesOrderDetails = new BindingList<SalesOrderDetail>();
        ((BindingList<SalesOrderDetail>)SalesOrderDetails).ListChanged += SalesOrder_ListChanged;
    }

    .... other properties

    [DataMember]
    public ICollection SalesOrderDetail{get; set;}
}

public partial class SalesOrderDetail : EntityBase
{

    .... other properties

    [DataMember]
    public SalesOrder SalesOrder{get; set;}
}

My EntityBase

[DataContract(IsReference = true)]
public class EntityBase:IAuditable, INotifyPropertyChanged
{
   .... IAuditable, INotify members
}

My WCF Method

    public SalesOrder SaveOrder(SalesOrder order) // At this point order.SalesOrderDetails count is 0.
    {
        if (order.OrderID == 0)
            AddSalesOrder(order);
        else
            UpdateSalesOrder(order);

        return order;
    }

What am I missing here? Thanks for your help!

Upvotes: 1

Views: 499

Answers (1)

isakavis
isakavis

Reputation: 785

I fixed it by adding [DataContract(IsReference = true)] to public partial class SalesOrder: EntityBase and public partial class SalesOrderDetail : EntityBase. Not sure how it made a difference. But that fixed my issue.

Upvotes: 3

Related Questions