调用WCF方法时,Navigation属性为null

时间:2013-04-24 01:28:41

标签: wcf entity-framework

我有以下代码,如下所示:

  1. 数据 - DbContext数据库访问。
  2. 实体 - 使用INotifyPropertyChanged的POCO实体
  3. WCF服务 - 使用数据和实体
  4. 测试库
  5. 以下是测试方法的代码。

            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目前有一个项目。但是当它到达WCF方法时,order.SalesOrderDetails的计数为0。

    这是我的SalesOrder类和SalesOrderDetail类

    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;}
    }
    

    我的实体基地

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

    我的WCF方法

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

    我在这里缺少什么?谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

我通过将[DataContract(IsReference = true)]添加到公共部分类SalesOrder来修复它:EntityBase和公共部分类SalesOrderDetail:EntityBase。不确定它是如何产生影响的。但这解决了我的问题。

相关问题