//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.1
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace TreeViewDNDWithRia
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using System.ServiceModel.DomainServices;
    using System.ServiceModel.DomainServices.Client;
    using System.ServiceModel.DomainServices.Client.ApplicationServices;
    
    
    /// <summary>
    /// Context for the RIA application.
    /// </summary>
    /// <remarks>
    /// This context extends the base to make application services and types available
    /// for consumption from code and xaml.
    /// </remarks>
    public sealed partial class WebContext : WebContextBase
    {
        
        #region Extensibility Method Definitions

        /// <summary>
        /// This method is invoked from the constructor once initialization is complete and
        /// can be used for further object setup.
        /// </summary>
        partial void OnCreated();

        #endregion
        
        
        /// <summary>
        /// Initializes a new instance of the WebContext class.
        /// </summary>
        public WebContext()
        {
            this.OnCreated();
        }
        
        /// <summary>
        /// Gets the context that is registered as a lifetime object with the current application.
        /// </summary>
        /// <exception cref="InvalidOperationException"> is thrown if there is no current application,
        /// no contexts have been added, or more than one context has been added.
        /// </exception>
        /// <seealso cref="System.Windows.Application.ApplicationLifetimeObjects"/>
        public new static WebContext Current
        {
            get
            {
                return ((WebContext)(WebContextBase.Current));
            }
        }
    }
}
namespace TreeViewDNDWithRia.Web
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.ServiceModel.DomainServices;
    using System.ServiceModel.DomainServices.Client;
    using System.ServiceModel.DomainServices.Client.ApplicationServices;
    using System.ServiceModel.Web;
    using System.Xml.Serialization;
    
    
    /// <summary>
    /// The 'Category' entity class.
    /// </summary>
    [DataContract(Namespace="http://schemas.datacontract.org/2004/07/TreeViewDNDWithRia.Web")]
    public sealed partial class Category : Entity
    {
        
        private int _categoryID;
        
        private string _categoryName;
        
        private string _description;
        
        private byte[] _picture;
        
        private EntityCollection<Product> _products;
        
        #region Extensibility Method Definitions

        /// <summary>
        /// This method is invoked from the constructor once initialization is complete and
        /// can be used for further object setup.
        /// </summary>
        partial void OnCreated();
        partial void OnCategoryIDChanging(int value);
        partial void OnCategoryIDChanged();
        partial void OnCategoryNameChanging(string value);
        partial void OnCategoryNameChanged();
        partial void OnDescriptionChanging(string value);
        partial void OnDescriptionChanged();
        partial void OnPictureChanging(byte[] value);
        partial void OnPictureChanged();

        #endregion
        
        
        /// <summary>
        /// Initializes a new instance of the <see cref="Category"/> class.
        /// </summary>
        public Category()
        {
            this.OnCreated();
        }
        
        /// <summary>
        /// Gets or sets the 'CategoryID' value.
        /// </summary>
        [DataMember()]
        [Editable(false, AllowInitialValue=true)]
        [Key()]
        [RoundtripOriginal()]
        public int CategoryID
        {
            get
            {
                return this._categoryID;
            }
            set
            {
                if ((this._categoryID != value))
                {
                    this.OnCategoryIDChanging(value);
                    this.ValidateProperty("CategoryID", value);
                    this._categoryID = value;
                    this.RaisePropertyChanged("CategoryID");
                    this.OnCategoryIDChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'CategoryName' value.
        /// </summary>
        [DataMember()]
        [Required()]
        [StringLength(15)]
        public string CategoryName
        {
            get
            {
                return this._categoryName;
            }
            set
            {
                if ((this._categoryName != value))
                {
                    this.OnCategoryNameChanging(value);
                    this.RaiseDataMemberChanging("CategoryName");
                    this.ValidateProperty("CategoryName", value);
                    this._categoryName = value;
                    this.RaiseDataMemberChanged("CategoryName");
                    this.OnCategoryNameChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'Description' value.
        /// </summary>
        [DataMember()]
        public string Description
        {
            get
            {
                return this._description;
            }
            set
            {
                if ((this._description != value))
                {
                    this.OnDescriptionChanging(value);
                    this.RaiseDataMemberChanging("Description");
                    this.ValidateProperty("Description", value);
                    this._description = value;
                    this.RaiseDataMemberChanged("Description");
                    this.OnDescriptionChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'Picture' value.
        /// </summary>
        [DataMember()]
        public byte[] Picture
        {
            get
            {
                return this._picture;
            }
            set
            {
                if ((this._picture != value))
                {
                    this.OnPictureChanging(value);
                    this.RaiseDataMemberChanging("Picture");
                    this.ValidateProperty("Picture", value);
                    this._picture = value;
                    this.RaiseDataMemberChanged("Picture");
                    this.OnPictureChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets the collection of associated <see cref="Product"/> entities.
        /// </summary>
        [Association("Category_Product", "CategoryID", "CategoryID")]
        [XmlIgnore()]
        public EntityCollection<Product> Products
        {
            get
            {
                if ((this._products == null))
                {
                    this._products = new EntityCollection<Product>(this, "Products", this.FilterProducts, this.AttachProducts, this.DetachProducts);
                }
                return this._products;
            }
        }
        
        private void AttachProducts(Product entity)
        {
            entity.Category = this;
        }
        
        private void DetachProducts(Product entity)
        {
            entity.Category = null;
        }
        
        private bool FilterProducts(Product entity)
        {
            return (entity.CategoryID == this.CategoryID);
        }
        
        /// <summary>
        /// Computes a value from the key fields that uniquely identifies this entity instance.
        /// </summary>
        /// <returns>An object instance that uniquely identifies this entity instance.</returns>
        public override object GetIdentity()
        {
            return this._categoryID;
        }
    }
    
    /// <summary>
    /// The domain context corresponding to the 'DomainServiceNorthwind' domain service.
    /// </summary>
    public sealed partial class DomainServiceNorthwind : DomainContext
    {
        
        #region Extensibility Method Definitions

        /// <summary>
        /// This method is invoked from the constructor once initialization is complete and
        /// can be used for further object setup.
        /// </summary>
        partial void OnCreated();

        #endregion
        
        
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainServiceNorthwind"/> class.
        /// </summary>
        public DomainServiceNorthwind() : 
                this(new WebDomainClient<IDomainServiceNorthwindContract>(new Uri("TreeViewDNDWithRia-Web-DomainServiceNorthwind.svc", UriKind.Relative)))
        {
        }
        
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainServiceNorthwind"/> class with the specified service URI.
        /// </summary>
        /// <param name="serviceUri">The DomainServiceNorthwind service URI.</param>
        public DomainServiceNorthwind(Uri serviceUri) : 
                this(new WebDomainClient<IDomainServiceNorthwindContract>(serviceUri))
        {
        }
        
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainServiceNorthwind"/> class with the specified <paramref name="domainClient"/>.
        /// </summary>
        /// <param name="domainClient">The DomainClient instance to use for this domain context.</param>
        public DomainServiceNorthwind(DomainClient domainClient) : 
                base(domainClient)
        {
            this.OnCreated();
        }
        
        /// <summary>
        /// Gets the set of <see cref="Category"/> entities that have been loaded into this <see cref="DomainServiceNorthwind"/> instance.
        /// </summary>
        public EntitySet<Category> Categories
        {
            get
            {
                return base.EntityContainer.GetEntitySet<Category>();
            }
        }
        
        /// <summary>
        /// Gets the set of <see cref="Order_Detail"/> entities that have been loaded into this <see cref="DomainServiceNorthwind"/> instance.
        /// </summary>
        public EntitySet<Order_Detail> Order_Details
        {
            get
            {
                return base.EntityContainer.GetEntitySet<Order_Detail>();
            }
        }
        
        /// <summary>
        /// Gets the set of <see cref="Order"/> entities that have been loaded into this <see cref="DomainServiceNorthwind"/> instance.
        /// </summary>
        public EntitySet<Order> Orders
        {
            get
            {
                return base.EntityContainer.GetEntitySet<Order>();
            }
        }
        
        /// <summary>
        /// Gets the set of <see cref="Product"/> entities that have been loaded into this <see cref="DomainServiceNorthwind"/> instance.
        /// </summary>
        public EntitySet<Product> Products
        {
            get
            {
                return base.EntityContainer.GetEntitySet<Product>();
            }
        }
        
        /// <summary>
        /// Gets an EntityQuery instance that can be used to load <see cref="Category"/> entities using the 'GetCategories' query.
        /// </summary>
        /// <returns>An EntityQuery that can be loaded to retrieve <see cref="Category"/> entities.</returns>
        public EntityQuery<Category> GetCategoriesQuery()
        {
            this.ValidateMethod("GetCategoriesQuery", null);
            return base.CreateQuery<Category>("GetCategories", null, false, true);
        }
        
        /// <summary>
        /// Gets an EntityQuery instance that can be used to load <see cref="Order_Detail"/> entities using the 'GetOrder_Details' query.
        /// </summary>
        /// <returns>An EntityQuery that can be loaded to retrieve <see cref="Order_Detail"/> entities.</returns>
        public EntityQuery<Order_Detail> GetOrder_DetailsQuery()
        {
            this.ValidateMethod("GetOrder_DetailsQuery", null);
            return base.CreateQuery<Order_Detail>("GetOrder_Details", null, false, true);
        }
        
        /// <summary>
        /// Gets an EntityQuery instance that can be used to load <see cref="Order"/> entities using the 'GetOrders' query.
        /// </summary>
        /// <returns>An EntityQuery that can be loaded to retrieve <see cref="Order"/> entities.</returns>
        public EntityQuery<Order> GetOrdersQuery()
        {
            this.ValidateMethod("GetOrdersQuery", null);
            return base.CreateQuery<Order>("GetOrders", null, false, true);
        }
        
        /// <summary>
        /// Gets an EntityQuery instance that can be used to load <see cref="Product"/> entities using the 'GetProducts' query.
        /// </summary>
        /// <returns>An EntityQuery that can be loaded to retrieve <see cref="Product"/> entities.</returns>
        public EntityQuery<Product> GetProductsQuery()
        {
            this.ValidateMethod("GetProductsQuery", null);
            return base.CreateQuery<Product>("GetProducts", null, false, true);
        }
        
        /// <summary>
        /// Creates a new entity container for this domain context's entity sets.
        /// </summary>
        /// <returns>A new container instance.</returns>
        protected override EntityContainer CreateEntityContainer()
        {
            return new DomainServiceNorthwindEntityContainer();
        }
        
        /// <summary>
        /// Service contract for the 'DomainServiceNorthwind' domain service.
        /// </summary>
        [ServiceContract()]
        public interface IDomainServiceNorthwindContract
        {
            
            /// <summary>
            /// Asynchronously invokes the 'GetCategories' operation.
            /// </summary>
            /// <param name="callback">Callback to invoke on completion.</param>
            /// <param name="asyncState">Optional state object.</param>
            /// <returns>An IAsyncResult that can be used to monitor the request.</returns>
            [FaultContract(typeof(DomainServiceFault), Action="http://tempuri.org/DomainServiceNorthwind/GetCategoriesDomainServiceFault", Name="DomainServiceFault", Namespace="DomainServices")]
            [OperationContract(AsyncPattern=true, Action="http://tempuri.org/DomainServiceNorthwind/GetCategories", ReplyAction="http://tempuri.org/DomainServiceNorthwind/GetCategoriesResponse")]
            [WebGet()]
            IAsyncResult BeginGetCategories(AsyncCallback callback, object asyncState);
            
            /// <summary>
            /// Completes the asynchronous operation begun by 'BeginGetCategories'.
            /// </summary>
            /// <param name="result">The IAsyncResult returned from 'BeginGetCategories'.</param>
            /// <returns>The 'QueryResult' returned from the 'GetCategories' operation.</returns>
            QueryResult<Category> EndGetCategories(IAsyncResult result);
            
            /// <summary>
            /// Asynchronously invokes the 'GetOrder_Details' operation.
            /// </summary>
            /// <param name="callback">Callback to invoke on completion.</param>
            /// <param name="asyncState">Optional state object.</param>
            /// <returns>An IAsyncResult that can be used to monitor the request.</returns>
            [FaultContract(typeof(DomainServiceFault), Action="http://tempuri.org/DomainServiceNorthwind/GetOrder_DetailsDomainServiceFault", Name="DomainServiceFault", Namespace="DomainServices")]
            [OperationContract(AsyncPattern=true, Action="http://tempuri.org/DomainServiceNorthwind/GetOrder_Details", ReplyAction="http://tempuri.org/DomainServiceNorthwind/GetOrder_DetailsResponse")]
            [WebGet()]
            IAsyncResult BeginGetOrder_Details(AsyncCallback callback, object asyncState);
            
            /// <summary>
            /// Completes the asynchronous operation begun by 'BeginGetOrder_Details'.
            /// </summary>
            /// <param name="result">The IAsyncResult returned from 'BeginGetOrder_Details'.</param>
            /// <returns>The 'QueryResult' returned from the 'GetOrder_Details' operation.</returns>
            QueryResult<Order_Detail> EndGetOrder_Details(IAsyncResult result);
            
            /// <summary>
            /// Asynchronously invokes the 'GetOrders' operation.
            /// </summary>
            /// <param name="callback">Callback to invoke on completion.</param>
            /// <param name="asyncState">Optional state object.</param>
            /// <returns>An IAsyncResult that can be used to monitor the request.</returns>
            [FaultContract(typeof(DomainServiceFault), Action="http://tempuri.org/DomainServiceNorthwind/GetOrdersDomainServiceFault", Name="DomainServiceFault", Namespace="DomainServices")]
            [OperationContract(AsyncPattern=true, Action="http://tempuri.org/DomainServiceNorthwind/GetOrders", ReplyAction="http://tempuri.org/DomainServiceNorthwind/GetOrdersResponse")]
            [WebGet()]
            IAsyncResult BeginGetOrders(AsyncCallback callback, object asyncState);
            
            /// <summary>
            /// Completes the asynchronous operation begun by 'BeginGetOrders'.
            /// </summary>
            /// <param name="result">The IAsyncResult returned from 'BeginGetOrders'.</param>
            /// <returns>The 'QueryResult' returned from the 'GetOrders' operation.</returns>
            QueryResult<Order> EndGetOrders(IAsyncResult result);
            
            /// <summary>
            /// Asynchronously invokes the 'GetProducts' operation.
            /// </summary>
            /// <param name="callback">Callback to invoke on completion.</param>
            /// <param name="asyncState">Optional state object.</param>
            /// <returns>An IAsyncResult that can be used to monitor the request.</returns>
            [FaultContract(typeof(DomainServiceFault), Action="http://tempuri.org/DomainServiceNorthwind/GetProductsDomainServiceFault", Name="DomainServiceFault", Namespace="DomainServices")]
            [OperationContract(AsyncPattern=true, Action="http://tempuri.org/DomainServiceNorthwind/GetProducts", ReplyAction="http://tempuri.org/DomainServiceNorthwind/GetProductsResponse")]
            [WebGet()]
            IAsyncResult BeginGetProducts(AsyncCallback callback, object asyncState);
            
            /// <summary>
            /// Completes the asynchronous operation begun by 'BeginGetProducts'.
            /// </summary>
            /// <param name="result">The IAsyncResult returned from 'BeginGetProducts'.</param>
            /// <returns>The 'QueryResult' returned from the 'GetProducts' operation.</returns>
            QueryResult<Product> EndGetProducts(IAsyncResult result);
            
            /// <summary>
            /// Asynchronously invokes the 'SubmitChanges' operation.
            /// </summary>
            /// <param name="changeSet">The change-set to submit.</param>
            /// <param name="callback">Callback to invoke on completion.</param>
            /// <param name="asyncState">Optional state object.</param>
            /// <returns>An IAsyncResult that can be used to monitor the request.</returns>
            [FaultContract(typeof(DomainServiceFault), Action="http://tempuri.org/DomainServiceNorthwind/SubmitChangesDomainServiceFault", Name="DomainServiceFault", Namespace="DomainServices")]
            [OperationContract(AsyncPattern=true, Action="http://tempuri.org/DomainServiceNorthwind/SubmitChanges", ReplyAction="http://tempuri.org/DomainServiceNorthwind/SubmitChangesResponse")]
            IAsyncResult BeginSubmitChanges(IEnumerable<ChangeSetEntry> changeSet, AsyncCallback callback, object asyncState);
            
            /// <summary>
            /// Completes the asynchronous operation begun by 'BeginSubmitChanges'.
            /// </summary>
            /// <param name="result">The IAsyncResult returned from 'BeginSubmitChanges'.</param>
            /// <returns>The collection of change-set entry elements returned from 'SubmitChanges'.</returns>
            IEnumerable<ChangeSetEntry> EndSubmitChanges(IAsyncResult result);
        }
        
        internal sealed class DomainServiceNorthwindEntityContainer : EntityContainer
        {
            
            public DomainServiceNorthwindEntityContainer()
            {
                this.CreateEntitySet<Category>(EntitySetOperations.All);
                this.CreateEntitySet<Order>(EntitySetOperations.All);
                this.CreateEntitySet<Order_Detail>(EntitySetOperations.All);
                this.CreateEntitySet<Product>(EntitySetOperations.All);
            }
        }
    }
    
    /// <summary>
    /// The 'Order' entity class.
    /// </summary>
    [DataContract(Namespace="http://schemas.datacontract.org/2004/07/TreeViewDNDWithRia.Web")]
    public sealed partial class Order : Entity
    {
        
        private string _customerID;
        
        private Nullable<int> _employeeID;
        
        private Nullable<decimal> _freight;
        
        private EntityCollection<Order_Detail> _order_Details;
        
        private Nullable<DateTime> _orderDate;
        
        private int _orderID;
        
        private Nullable<DateTime> _requiredDate;
        
        private string _shipAddress;
        
        private string _shipCity;
        
        private string _shipCountry;
        
        private string _shipName;
        
        private Nullable<DateTime> _shippedDate;
        
        private string _shipPostalCode;
        
        private string _shipRegion;
        
        private Nullable<int> _shipVia;
        
        #region Extensibility Method Definitions

        /// <summary>
        /// This method is invoked from the constructor once initialization is complete and
        /// can be used for further object setup.
        /// </summary>
        partial void OnCreated();
        partial void OnCustomerIDChanging(string value);
        partial void OnCustomerIDChanged();
        partial void OnEmployeeIDChanging(Nullable<int> value);
        partial void OnEmployeeIDChanged();
        partial void OnFreightChanging(Nullable<decimal> value);
        partial void OnFreightChanged();
        partial void OnOrderDateChanging(Nullable<DateTime> value);
        partial void OnOrderDateChanged();
        partial void OnOrderIDChanging(int value);
        partial void OnOrderIDChanged();
        partial void OnRequiredDateChanging(Nullable<DateTime> value);
        partial void OnRequiredDateChanged();
        partial void OnShipAddressChanging(string value);
        partial void OnShipAddressChanged();
        partial void OnShipCityChanging(string value);
        partial void OnShipCityChanged();
        partial void OnShipCountryChanging(string value);
        partial void OnShipCountryChanged();
        partial void OnShipNameChanging(string value);
        partial void OnShipNameChanged();
        partial void OnShippedDateChanging(Nullable<DateTime> value);
        partial void OnShippedDateChanged();
        partial void OnShipPostalCodeChanging(string value);
        partial void OnShipPostalCodeChanged();
        partial void OnShipRegionChanging(string value);
        partial void OnShipRegionChanged();
        partial void OnShipViaChanging(Nullable<int> value);
        partial void OnShipViaChanged();

        #endregion
        
        
        /// <summary>
        /// Initializes a new instance of the <see cref="Order"/> class.
        /// </summary>
        public Order()
        {
            this.OnCreated();
        }
        
        /// <summary>
        /// Gets or sets the 'CustomerID' value.
        /// </summary>
        [DataMember()]
        [StringLength(5)]
        public string CustomerID
        {
            get
            {
                return this._customerID;
            }
            set
            {
                if ((this._customerID != value))
                {
                    this.OnCustomerIDChanging(value);
                    this.RaiseDataMemberChanging("CustomerID");
                    this.ValidateProperty("CustomerID", value);
                    this._customerID = value;
                    this.RaiseDataMemberChanged("CustomerID");
                    this.OnCustomerIDChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'EmployeeID' value.
        /// </summary>
        [DataMember()]
        public Nullable<int> EmployeeID
        {
            get
            {
                return this._employeeID;
            }
            set
            {
                if ((this._employeeID != value))
                {
                    this.OnEmployeeIDChanging(value);
                    this.RaiseDataMemberChanging("EmployeeID");
                    this.ValidateProperty("EmployeeID", value);
                    this._employeeID = value;
                    this.RaiseDataMemberChanged("EmployeeID");
                    this.OnEmployeeIDChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'Freight' value.
        /// </summary>
        [DataMember()]
        public Nullable<decimal> Freight
        {
            get
            {
                return this._freight;
            }
            set
            {
                if ((this._freight != value))
                {
                    this.OnFreightChanging(value);
                    this.RaiseDataMemberChanging("Freight");
                    this.ValidateProperty("Freight", value);
                    this._freight = value;
                    this.RaiseDataMemberChanged("Freight");
                    this.OnFreightChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets the collection of associated <see cref="Order_Detail"/> entities.
        /// </summary>
        [Association("Order_Order_Detail", "OrderID", "OrderID")]
        [XmlIgnore()]
        public EntityCollection<Order_Detail> Order_Details
        {
            get
            {
                if ((this._order_Details == null))
                {
                    this._order_Details = new EntityCollection<Order_Detail>(this, "Order_Details", this.FilterOrder_Details, this.AttachOrder_Details, this.DetachOrder_Details);
                }
                return this._order_Details;
            }
        }
        
        /// <summary>
        /// Gets or sets the 'OrderDate' value.
        /// </summary>
        [DataMember()]
        public Nullable<DateTime> OrderDate
        {
            get
            {
                return this._orderDate;
            }
            set
            {
                if ((this._orderDate != value))
                {
                    this.OnOrderDateChanging(value);
                    this.RaiseDataMemberChanging("OrderDate");
                    this.ValidateProperty("OrderDate", value);
                    this._orderDate = value;
                    this.RaiseDataMemberChanged("OrderDate");
                    this.OnOrderDateChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'OrderID' value.
        /// </summary>
        [DataMember()]
        [Editable(false, AllowInitialValue=true)]
        [Key()]
        [RoundtripOriginal()]
        public int OrderID
        {
            get
            {
                return this._orderID;
            }
            set
            {
                if ((this._orderID != value))
                {
                    this.OnOrderIDChanging(value);
                    this.ValidateProperty("OrderID", value);
                    this._orderID = value;
                    this.RaisePropertyChanged("OrderID");
                    this.OnOrderIDChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'RequiredDate' value.
        /// </summary>
        [DataMember()]
        public Nullable<DateTime> RequiredDate
        {
            get
            {
                return this._requiredDate;
            }
            set
            {
                if ((this._requiredDate != value))
                {
                    this.OnRequiredDateChanging(value);
                    this.RaiseDataMemberChanging("RequiredDate");
                    this.ValidateProperty("RequiredDate", value);
                    this._requiredDate = value;
                    this.RaiseDataMemberChanged("RequiredDate");
                    this.OnRequiredDateChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'ShipAddress' value.
        /// </summary>
        [DataMember()]
        [StringLength(60)]
        public string ShipAddress
        {
            get
            {
                return this._shipAddress;
            }
            set
            {
                if ((this._shipAddress != value))
                {
                    this.OnShipAddressChanging(value);
                    this.RaiseDataMemberChanging("ShipAddress");
                    this.ValidateProperty("ShipAddress", value);
                    this._shipAddress = value;
                    this.RaiseDataMemberChanged("ShipAddress");
                    this.OnShipAddressChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'ShipCity' value.
        /// </summary>
        [DataMember()]
        [StringLength(15)]
        public string ShipCity
        {
            get
            {
                return this._shipCity;
            }
            set
            {
                if ((this._shipCity != value))
                {
                    this.OnShipCityChanging(value);
                    this.RaiseDataMemberChanging("ShipCity");
                    this.ValidateProperty("ShipCity", value);
                    this._shipCity = value;
                    this.RaiseDataMemberChanged("ShipCity");
                    this.OnShipCityChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'ShipCountry' value.
        /// </summary>
        [DataMember()]
        [StringLength(15)]
        public string ShipCountry
        {
            get
            {
                return this._shipCountry;
            }
            set
            {
                if ((this._shipCountry != value))
                {
                    this.OnShipCountryChanging(value);
                    this.RaiseDataMemberChanging("ShipCountry");
                    this.ValidateProperty("ShipCountry", value);
                    this._shipCountry = value;
                    this.RaiseDataMemberChanged("ShipCountry");
                    this.OnShipCountryChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'ShipName' value.
        /// </summary>
        [DataMember()]
        [StringLength(40)]
        public string ShipName
        {
            get
            {
                return this._shipName;
            }
            set
            {
                if ((this._shipName != value))
                {
                    this.OnShipNameChanging(value);
                    this.RaiseDataMemberChanging("ShipName");
                    this.ValidateProperty("ShipName", value);
                    this._shipName = value;
                    this.RaiseDataMemberChanged("ShipName");
                    this.OnShipNameChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'ShippedDate' value.
        /// </summary>
        [DataMember()]
        public Nullable<DateTime> ShippedDate
        {
            get
            {
                return this._shippedDate;
            }
            set
            {
                if ((this._shippedDate != value))
                {
                    this.OnShippedDateChanging(value);
                    this.RaiseDataMemberChanging("ShippedDate");
                    this.ValidateProperty("ShippedDate", value);
                    this._shippedDate = value;
                    this.RaiseDataMemberChanged("ShippedDate");
                    this.OnShippedDateChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'ShipPostalCode' value.
        /// </summary>
        [DataMember()]
        [StringLength(10)]
        public string ShipPostalCode
        {
            get
            {
                return this._shipPostalCode;
            }
            set
            {
                if ((this._shipPostalCode != value))
                {
                    this.OnShipPostalCodeChanging(value);
                    this.RaiseDataMemberChanging("ShipPostalCode");
                    this.ValidateProperty("ShipPostalCode", value);
                    this._shipPostalCode = value;
                    this.RaiseDataMemberChanged("ShipPostalCode");
                    this.OnShipPostalCodeChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'ShipRegion' value.
        /// </summary>
        [DataMember()]
        [StringLength(15)]
        public string ShipRegion
        {
            get
            {
                return this._shipRegion;
            }
            set
            {
                if ((this._shipRegion != value))
                {
                    this.OnShipRegionChanging(value);
                    this.RaiseDataMemberChanging("ShipRegion");
                    this.ValidateProperty("ShipRegion", value);
                    this._shipRegion = value;
                    this.RaiseDataMemberChanged("ShipRegion");
                    this.OnShipRegionChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'ShipVia' value.
        /// </summary>
        [DataMember()]
        public Nullable<int> ShipVia
        {
            get
            {
                return this._shipVia;
            }
            set
            {
                if ((this._shipVia != value))
                {
                    this.OnShipViaChanging(value);
                    this.RaiseDataMemberChanging("ShipVia");
                    this.ValidateProperty("ShipVia", value);
                    this._shipVia = value;
                    this.RaiseDataMemberChanged("ShipVia");
                    this.OnShipViaChanged();
                }
            }
        }
        
        private void AttachOrder_Details(Order_Detail entity)
        {
            entity.Order = this;
        }
        
        private void DetachOrder_Details(Order_Detail entity)
        {
            entity.Order = null;
        }
        
        private bool FilterOrder_Details(Order_Detail entity)
        {
            return (entity.OrderID == this.OrderID);
        }
        
        /// <summary>
        /// Computes a value from the key fields that uniquely identifies this entity instance.
        /// </summary>
        /// <returns>An object instance that uniquely identifies this entity instance.</returns>
        public override object GetIdentity()
        {
            return this._orderID;
        }
    }
    
    /// <summary>
    /// The 'Order_Detail' entity class.
    /// </summary>
    [DataContract(Namespace="http://schemas.datacontract.org/2004/07/TreeViewDNDWithRia.Web")]
    public sealed partial class Order_Detail : Entity
    {
        
        private float _discount;
        
        private EntityRef<Order> _order;
        
        private int _orderID;
        
        private EntityRef<Product> _product;
        
        private int _productID;
        
        private short _quantity;
        
        private decimal _unitPrice;
        
        #region Extensibility Method Definitions

        /// <summary>
        /// This method is invoked from the constructor once initialization is complete and
        /// can be used for further object setup.
        /// </summary>
        partial void OnCreated();
        partial void OnDiscountChanging(float value);
        partial void OnDiscountChanged();
        partial void OnOrderIDChanging(int value);
        partial void OnOrderIDChanged();
        partial void OnProductIDChanging(int value);
        partial void OnProductIDChanged();
        partial void OnQuantityChanging(short value);
        partial void OnQuantityChanged();
        partial void OnUnitPriceChanging(decimal value);
        partial void OnUnitPriceChanged();

        #endregion
        
        
        /// <summary>
        /// Initializes a new instance of the <see cref="Order_Detail"/> class.
        /// </summary>
        public Order_Detail()
        {
            this.OnCreated();
        }
        
        /// <summary>
        /// Gets or sets the 'Discount' value.
        /// </summary>
        [DataMember()]
        public float Discount
        {
            get
            {
                return this._discount;
            }
            set
            {
                if ((this._discount != value))
                {
                    this.OnDiscountChanging(value);
                    this.RaiseDataMemberChanging("Discount");
                    this.ValidateProperty("Discount", value);
                    this._discount = value;
                    this.RaiseDataMemberChanged("Discount");
                    this.OnDiscountChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the associated <see cref="Order"/> entity.
        /// </summary>
        [Association("Order_Order_Detail", "OrderID", "OrderID", IsForeignKey=true)]
        [XmlIgnore()]
        public Order Order
        {
            get
            {
                if ((this._order == null))
                {
                    this._order = new EntityRef<Order>(this, "Order", this.FilterOrder);
                }
                return this._order.Entity;
            }
            set
            {
                Order previous = this.Order;
                if ((previous != value))
                {
                    this.ValidateProperty("Order", value);
                    if ((previous != null))
                    {
                        this._order.Entity = null;
                        previous.Order_Details.Remove(this);
                    }
                    if ((value != null))
                    {
                        this.OrderID = value.OrderID;
                    }
                    else
                    {
                        this.OrderID = default(int);
                    }
                    this._order.Entity = value;
                    if ((value != null))
                    {
                        value.Order_Details.Add(this);
                    }
                    this.RaisePropertyChanged("Order");
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'OrderID' value.
        /// </summary>
        [DataMember()]
        [Key()]
        [RoundtripOriginal()]
        public int OrderID
        {
            get
            {
                return this._orderID;
            }
            set
            {
                if ((this._orderID != value))
                {
                    this.OnOrderIDChanging(value);
                    this.RaiseDataMemberChanging("OrderID");
                    this.ValidateProperty("OrderID", value);
                    this._orderID = value;
                    this.RaiseDataMemberChanged("OrderID");
                    this.OnOrderIDChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the associated <see cref="Product"/> entity.
        /// </summary>
        [Association("Product_Order_Detail", "ProductID", "ProductID", IsForeignKey=true)]
        [XmlIgnore()]
        public Product Product
        {
            get
            {
                if ((this._product == null))
                {
                    this._product = new EntityRef<Product>(this, "Product", this.FilterProduct);
                }
                return this._product.Entity;
            }
            set
            {
                Product previous = this.Product;
                if ((previous != value))
                {
                    this.ValidateProperty("Product", value);
                    if ((previous != null))
                    {
                        this._product.Entity = null;
                        previous.Order_Details.Remove(this);
                    }
                    if ((value != null))
                    {
                        this.ProductID = value.ProductID;
                    }
                    else
                    {
                        this.ProductID = default(int);
                    }
                    this._product.Entity = value;
                    if ((value != null))
                    {
                        value.Order_Details.Add(this);
                    }
                    this.RaisePropertyChanged("Product");
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'ProductID' value.
        /// </summary>
        [DataMember()]
        [Key()]
        [RoundtripOriginal()]
        public int ProductID
        {
            get
            {
                return this._productID;
            }
            set
            {
                if ((this._productID != value))
                {
                    this.OnProductIDChanging(value);
                    this.RaiseDataMemberChanging("ProductID");
                    this.ValidateProperty("ProductID", value);
                    this._productID = value;
                    this.RaiseDataMemberChanged("ProductID");
                    this.OnProductIDChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'Quantity' value.
        /// </summary>
        [DataMember()]
        public short Quantity
        {
            get
            {
                return this._quantity;
            }
            set
            {
                if ((this._quantity != value))
                {
                    this.OnQuantityChanging(value);
                    this.RaiseDataMemberChanging("Quantity");
                    this.ValidateProperty("Quantity", value);
                    this._quantity = value;
                    this.RaiseDataMemberChanged("Quantity");
                    this.OnQuantityChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'UnitPrice' value.
        /// </summary>
        [DataMember()]
        public decimal UnitPrice
        {
            get
            {
                return this._unitPrice;
            }
            set
            {
                if ((this._unitPrice != value))
                {
                    this.OnUnitPriceChanging(value);
                    this.RaiseDataMemberChanging("UnitPrice");
                    this.ValidateProperty("UnitPrice", value);
                    this._unitPrice = value;
                    this.RaiseDataMemberChanged("UnitPrice");
                    this.OnUnitPriceChanged();
                }
            }
        }
        
        private bool FilterOrder(Order entity)
        {
            return (entity.OrderID == this.OrderID);
        }
        
        private bool FilterProduct(Product entity)
        {
            return (entity.ProductID == this.ProductID);
        }
        
        /// <summary>
        /// Computes a value from the key fields that uniquely identifies this entity instance.
        /// </summary>
        /// <returns>An object instance that uniquely identifies this entity instance.</returns>
        public override object GetIdentity()
        {
            return EntityKey.Create(this._orderID, this._productID);
        }
    }
    
    /// <summary>
    /// The 'Product' entity class.
    /// </summary>
    [DataContract(Namespace="http://schemas.datacontract.org/2004/07/TreeViewDNDWithRia.Web")]
    public sealed partial class Product : Entity
    {
        
        private EntityRef<Category> _category;
        
        private Nullable<int> _categoryID;
        
        private bool _discontinued;
        
        private EntityCollection<Order_Detail> _order_Details;
        
        private int _productID;
        
        private string _productName;
        
        private string _quantityPerUnit;
        
        private Nullable<short> _reorderLevel;
        
        private Nullable<int> _supplierID;
        
        private Nullable<decimal> _unitPrice;
        
        private Nullable<short> _unitsInStock;
        
        private Nullable<short> _unitsOnOrder;
        
        #region Extensibility Method Definitions

        /// <summary>
        /// This method is invoked from the constructor once initialization is complete and
        /// can be used for further object setup.
        /// </summary>
        partial void OnCreated();
        partial void OnCategoryIDChanging(Nullable<int> value);
        partial void OnCategoryIDChanged();
        partial void OnDiscontinuedChanging(bool value);
        partial void OnDiscontinuedChanged();
        partial void OnProductIDChanging(int value);
        partial void OnProductIDChanged();
        partial void OnProductNameChanging(string value);
        partial void OnProductNameChanged();
        partial void OnQuantityPerUnitChanging(string value);
        partial void OnQuantityPerUnitChanged();
        partial void OnReorderLevelChanging(Nullable<short> value);
        partial void OnReorderLevelChanged();
        partial void OnSupplierIDChanging(Nullable<int> value);
        partial void OnSupplierIDChanged();
        partial void OnUnitPriceChanging(Nullable<decimal> value);
        partial void OnUnitPriceChanged();
        partial void OnUnitsInStockChanging(Nullable<short> value);
        partial void OnUnitsInStockChanged();
        partial void OnUnitsOnOrderChanging(Nullable<short> value);
        partial void OnUnitsOnOrderChanged();

        #endregion
        
        
        /// <summary>
        /// Initializes a new instance of the <see cref="Product"/> class.
        /// </summary>
        public Product()
        {
            this.OnCreated();
        }
        
        /// <summary>
        /// Gets or sets the associated <see cref="Category"/> entity.
        /// </summary>
        [Association("Category_Product", "CategoryID", "CategoryID", IsForeignKey=true)]
        [XmlIgnore()]
        public Category Category
        {
            get
            {
                if ((this._category == null))
                {
                    this._category = new EntityRef<Category>(this, "Category", this.FilterCategory);
                }
                return this._category.Entity;
            }
            set
            {
                Category previous = this.Category;
                if ((previous != value))
                {
                    this.ValidateProperty("Category", value);
                    if ((previous != null))
                    {
                        this._category.Entity = null;
                        previous.Products.Remove(this);
                    }
                    if ((value != null))
                    {
                        this.CategoryID = value.CategoryID;
                    }
                    else
                    {
                        this.CategoryID = default(Nullable<int>);
                    }
                    this._category.Entity = value;
                    if ((value != null))
                    {
                        value.Products.Add(this);
                    }
                    this.RaisePropertyChanged("Category");
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'CategoryID' value.
        /// </summary>
        [DataMember()]
        [RoundtripOriginal()]
        public Nullable<int> CategoryID
        {
            get
            {
                return this._categoryID;
            }
            set
            {
                if ((this._categoryID != value))
                {
                    this.OnCategoryIDChanging(value);
                    this.RaiseDataMemberChanging("CategoryID");
                    this.ValidateProperty("CategoryID", value);
                    this._categoryID = value;
                    this.RaiseDataMemberChanged("CategoryID");
                    this.OnCategoryIDChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'Discontinued' value.
        /// </summary>
        [DataMember()]
        public bool Discontinued
        {
            get
            {
                return this._discontinued;
            }
            set
            {
                if ((this._discontinued != value))
                {
                    this.OnDiscontinuedChanging(value);
                    this.RaiseDataMemberChanging("Discontinued");
                    this.ValidateProperty("Discontinued", value);
                    this._discontinued = value;
                    this.RaiseDataMemberChanged("Discontinued");
                    this.OnDiscontinuedChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets the collection of associated <see cref="Order_Detail"/> entities.
        /// </summary>
        [Association("Product_Order_Detail", "ProductID", "ProductID")]
        [XmlIgnore()]
        public EntityCollection<Order_Detail> Order_Details
        {
            get
            {
                if ((this._order_Details == null))
                {
                    this._order_Details = new EntityCollection<Order_Detail>(this, "Order_Details", this.FilterOrder_Details, this.AttachOrder_Details, this.DetachOrder_Details);
                }
                return this._order_Details;
            }
        }
        
        /// <summary>
        /// Gets or sets the 'ProductID' value.
        /// </summary>
        [DataMember()]
        [Editable(false, AllowInitialValue=true)]
        [Key()]
        [RoundtripOriginal()]
        public int ProductID
        {
            get
            {
                return this._productID;
            }
            set
            {
                if ((this._productID != value))
                {
                    this.OnProductIDChanging(value);
                    this.ValidateProperty("ProductID", value);
                    this._productID = value;
                    this.RaisePropertyChanged("ProductID");
                    this.OnProductIDChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'ProductName' value.
        /// </summary>
        [DataMember()]
        [Required()]
        [StringLength(40)]
        public string ProductName
        {
            get
            {
                return this._productName;
            }
            set
            {
                if ((this._productName != value))
                {
                    this.OnProductNameChanging(value);
                    this.RaiseDataMemberChanging("ProductName");
                    this.ValidateProperty("ProductName", value);
                    this._productName = value;
                    this.RaiseDataMemberChanged("ProductName");
                    this.OnProductNameChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'QuantityPerUnit' value.
        /// </summary>
        [DataMember()]
        [StringLength(20)]
        public string QuantityPerUnit
        {
            get
            {
                return this._quantityPerUnit;
            }
            set
            {
                if ((this._quantityPerUnit != value))
                {
                    this.OnQuantityPerUnitChanging(value);
                    this.RaiseDataMemberChanging("QuantityPerUnit");
                    this.ValidateProperty("QuantityPerUnit", value);
                    this._quantityPerUnit = value;
                    this.RaiseDataMemberChanged("QuantityPerUnit");
                    this.OnQuantityPerUnitChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'ReorderLevel' value.
        /// </summary>
        [DataMember()]
        public Nullable<short> ReorderLevel
        {
            get
            {
                return this._reorderLevel;
            }
            set
            {
                if ((this._reorderLevel != value))
                {
                    this.OnReorderLevelChanging(value);
                    this.RaiseDataMemberChanging("ReorderLevel");
                    this.ValidateProperty("ReorderLevel", value);
                    this._reorderLevel = value;
                    this.RaiseDataMemberChanged("ReorderLevel");
                    this.OnReorderLevelChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'SupplierID' value.
        /// </summary>
        [DataMember()]
        public Nullable<int> SupplierID
        {
            get
            {
                return this._supplierID;
            }
            set
            {
                if ((this._supplierID != value))
                {
                    this.OnSupplierIDChanging(value);
                    this.RaiseDataMemberChanging("SupplierID");
                    this.ValidateProperty("SupplierID", value);
                    this._supplierID = value;
                    this.RaiseDataMemberChanged("SupplierID");
                    this.OnSupplierIDChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'UnitPrice' value.
        /// </summary>
        [DataMember()]
        public Nullable<decimal> UnitPrice
        {
            get
            {
                return this._unitPrice;
            }
            set
            {
                if ((this._unitPrice != value))
                {
                    this.OnUnitPriceChanging(value);
                    this.RaiseDataMemberChanging("UnitPrice");
                    this.ValidateProperty("UnitPrice", value);
                    this._unitPrice = value;
                    this.RaiseDataMemberChanged("UnitPrice");
                    this.OnUnitPriceChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'UnitsInStock' value.
        /// </summary>
        [DataMember()]
        public Nullable<short> UnitsInStock
        {
            get
            {
                return this._unitsInStock;
            }
            set
            {
                if ((this._unitsInStock != value))
                {
                    this.OnUnitsInStockChanging(value);
                    this.RaiseDataMemberChanging("UnitsInStock");
                    this.ValidateProperty("UnitsInStock", value);
                    this._unitsInStock = value;
                    this.RaiseDataMemberChanged("UnitsInStock");
                    this.OnUnitsInStockChanged();
                }
            }
        }
        
        /// <summary>
        /// Gets or sets the 'UnitsOnOrder' value.
        /// </summary>
        [DataMember()]
        public Nullable<short> UnitsOnOrder
        {
            get
            {
                return this._unitsOnOrder;
            }
            set
            {
                if ((this._unitsOnOrder != value))
                {
                    this.OnUnitsOnOrderChanging(value);
                    this.RaiseDataMemberChanging("UnitsOnOrder");
                    this.ValidateProperty("UnitsOnOrder", value);
                    this._unitsOnOrder = value;
                    this.RaiseDataMemberChanged("UnitsOnOrder");
                    this.OnUnitsOnOrderChanged();
                }
            }
        }
        
        private bool FilterCategory(Category entity)
        {
            return (entity.CategoryID == this.CategoryID);
        }
        
        private void AttachOrder_Details(Order_Detail entity)
        {
            entity.Product = this;
        }
        
        private void DetachOrder_Details(Order_Detail entity)
        {
            entity.Product = null;
        }
        
        private bool FilterOrder_Details(Order_Detail entity)
        {
            return (entity.ProductID == this.ProductID);
        }
        
        /// <summary>
        /// Computes a value from the key fields that uniquely identifies this entity instance.
        /// </summary>
        /// <returns>An object instance that uniquely identifies this entity instance.</returns>
        public override object GetIdentity()
        {
            return this._productID;
        }
    }
}
