Language preference:

Phase 1 / Introducing Entity classes and DataFields

The Entity class describes the structure of the table, where properties map to columns in the database. The properties are called DataFields throughout BLD.

The Data Access Layer defines the structure of the Entity class. It contains DataFields known to the database, and DataFields to describe relationships. Its properties hold the data from a single record in your database. It does not contain any of your business rules.

Both the Business Logic Layer and User Interface Layer will use instances of this object as data is shared between the records.

[EdmEntityTypeAttribute(NamespaceName="NorthwindModel", Name="Category")]
public partial class Category : EntityObject
{
  [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
  public System.Int32 CategoryID
  { … }
  [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
  public System.String CategoryName
  { … }
  [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
  public System.String Description
  { … }
}

You don’t edit these classes. They are always managed for you by Entity Framework, LINQ to SQL, or whatever other Data Access Layer technology that you have chosen.

The Business Logic Layer – your code – defines a parallel version of the DAL’s Entity class, where your business rules go. It is actually a Partial Class, using the same namespace and class name as the one in the DAL, with the partial keyword on it.

[MetadataType(typeof(CategoryMetadata))]
[EntityDAOType(typeof(CategoryEntityDAO))]
public partial class Category  
{
 // business logic methods go here.
}

Here you will add methods to handle custom validation cases, change business rules on-the-fly, and add properties defining custom DataFields – values that are not actually in the original table or DAL’s Entity class.

Use the Source Code Browser to explore the file generated by LINQ to SQL that contains its Entity classes (and more).

Relationships to other Tables appear as DataFields too. Their structure is an instance of the related entity class for a one-to-one or many-to-one relationship and a list of related entities for one-to-many and many-to-many relationships.

There are two types of DataFields involved in a relationship.

  • Relationship DataFields host the Entity object or objects in the related entity class.
  • Foreign key DataFields host the data used to look up the record or records in the related table. They host actual primary key values in the related table.
Important Throughout BLD, you will work with the Relationship DataFields instead of the foreign key DataFields.

In this example, the Product Entity class has a one-to-one relationship with the Category Entity class by specifying Category as the Relationship DataField and CategoryID as the Foreign key DataField.

[EdmEntityTypeAttribute(NamespaceName="NorthwindModel", Name="Product")]
public partial class Product : EntityObject
{
// omitted most of the properties for Product

  [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
  public Nullable<System.Int32> CategoryID
  { … }
  [EdmRelationshipNavigationPropertyAttribute("NorthwindModel", "FK_Products_Categories", "Categories")]
  public Category Category
  { … }
}

The next topic introduces how you apply business rules to your Entity classes.



Open the Source Code Browser (C# only)
Source Code Browser
 
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.235
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;

namespace PeterBlum.InitialEntities
{

   [global::System.Data.Linq.Mapping.DatabaseAttribute(Name = "NORTHWND")]
   public partial class NorthWindDataContext : System.Data.Linq.DataContext
   {

      private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();

      #region Extensibility Method Definitions
      partial void OnCreated();
      partial void InsertCategory(Category instance);
      partial void UpdateCategory(Category instance);
      partial void DeleteCategory(Category instance);
      partial void InsertTerritory(Territory instance);
      partial void UpdateTerritory(Territory instance);
      partial void DeleteTerritory(Territory instance);
      partial void InsertCustomerCustomerDemo(CustomerCustomerDemo instance);
      partial void UpdateCustomerCustomerDemo(CustomerCustomerDemo instance);
      partial void DeleteCustomerCustomerDemo(CustomerCustomerDemo instance);
      partial void InsertCustomerDemographic(CustomerDemographic instance);
      partial void UpdateCustomerDemographic(CustomerDemographic instance);
      partial void DeleteCustomerDemographic(CustomerDemographic instance);
      partial void InsertCustomer(Customer instance);
      partial void UpdateCustomer(Customer instance);
      partial void DeleteCustomer(Customer instance);
      partial void InsertEmployee(Employee instance);
      partial void UpdateEmployee(Employee instance);
      partial void DeleteEmployee(Employee instance);
      partial void InsertEmployeeTerritory(EmployeeTerritory instance);
      partial void UpdateEmployeeTerritory(EmployeeTerritory instance);
      partial void DeleteEmployeeTerritory(EmployeeTerritory instance);
      partial void InsertOrder_Detail(Order_Detail instance);
      partial void UpdateOrder_Detail(Order_Detail instance);
      partial void DeleteOrder_Detail(Order_Detail instance);
      partial void InsertOrder(Order instance);
      partial void UpdateOrder(Order instance);
      partial void DeleteOrder(Order instance);
      partial void InsertProduct(Product instance);
      partial void UpdateProduct(Product instance);
      partial void DeleteProduct(Product instance);
      partial void InsertRegion(Region instance);
      partial void UpdateRegion(Region instance);
      partial void DeleteRegion(Region instance);
      partial void InsertShipper(Shipper instance);
      partial void UpdateShipper(Shipper instance);
      partial void DeleteShipper(Shipper instance);
      partial void InsertSupplier(Supplier instance);
      partial void UpdateSupplier(Supplier instance);
      partial void DeleteSupplier(Supplier instance);
      #endregion

      public NorthWindDataContext() :
         base(global::System.Configuration.ConfigurationManager.ConnectionStrings["NORTHWNDConnectionString"].ConnectionString, mappingSource)
      {
         OnCreated();
      }

      public NorthWindDataContext(string connection) :
         base(connection, mappingSource)
      {
         OnCreated();
      }

      public NorthWindDataContext(System.Data.IDbConnection connection) :
         base(connection, mappingSource)
      {
         OnCreated();
      }

      public NorthWindDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) :
         base(connection, mappingSource)
      {
         OnCreated();
      }

      public NorthWindDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) :
         base(connection, mappingSource)
      {
         OnCreated();
      }

      public System.Data.Linq.Table<Category> Categories
      {
         get
         {
            return this.GetTable<Category>();
         }
      }

      public System.Data.Linq.Table<Territory> Territories
      {
         get
         {
            return this.GetTable<Territory>();
         }
      }

      public System.Data.Linq.Table<CustomerCustomerDemo> CustomerCustomerDemos
      {
         get
         {
            return this.GetTable<CustomerCustomerDemo>();
         }
      }

      public System.Data.Linq.Table<CustomerDemographic> CustomerDemographics
      {
         get
         {
            return this.GetTable<CustomerDemographic>();
         }
      }

      public System.Data.Linq.Table<Customer> Customers
      {
         get
         {
            return this.GetTable<Customer>();
         }
      }

      public System.Data.Linq.Table<Employee> Employees
      {
         get
         {
            return this.GetTable<Employee>();
         }
      }

      public System.Data.Linq.Table<EmployeeTerritory> EmployeeTerritories
      {
         get
         {
            return this.GetTable<EmployeeTerritory>();
         }
      }

      public System.Data.Linq.Table<Order_Detail> Order_Details
      {
         get
         {
            return this.GetTable<Order_Detail>();
         }
      }

      public System.Data.Linq.Table<Order> Orders
      {
         get
         {
            return this.GetTable<Order>();
         }
      }

      public System.Data.Linq.Table<Product> Products
      {
         get
         {
            return this.GetTable<Product>();
         }
      }

      public System.Data.Linq.Table<Region> Regions
      {
         get
         {
            return this.GetTable<Region>();
         }
      }

      public System.Data.Linq.Table<Shipper> Shippers
      {
         get
         {
            return this.GetTable<Shipper>();
         }
      }

      public System.Data.Linq.Table<Supplier> Suppliers
      {
         get
         {
            return this.GetTable<Supplier>();
         }
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.Categories")]
   public partial class Category : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private int _CategoryID;

      private string _CategoryName;

      private string _Description;

      private System.Data.Linq.Binary _Picture;

      private EntitySet<Product> _Products;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      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(System.Data.Linq.Binary value);
      partial void OnPictureChanged();
      #endregion

      public Category()
      {
         this._Products = new EntitySet<Product>(new Action<Product>(this.attach_Products), new Action<Product>(this.detach_Products));
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_CategoryID", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]
      public int CategoryID
      {
         get
         {
            return this._CategoryID;
         }
         set
         {
            if ((this._CategoryID != value))
            {
               this.OnCategoryIDChanging(value);
               this.SendPropertyChanging();
               this._CategoryID = value;
               this.SendPropertyChanged("CategoryID");
               this.OnCategoryIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_CategoryName", DbType = "NVarChar(15) NOT NULL", CanBeNull = false)]
      public string CategoryName
      {
         get
         {
            return this._CategoryName;
         }
         set
         {
            if ((this._CategoryName != value))
            {
               this.OnCategoryNameChanging(value);
               this.SendPropertyChanging();
               this._CategoryName = value;
               this.SendPropertyChanged("CategoryName");
               this.OnCategoryNameChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Description", DbType = "NText", UpdateCheck = UpdateCheck.Never)]
      public string Description
      {
         get
         {
            return this._Description;
         }
         set
         {
            if ((this._Description != value))
            {
               this.OnDescriptionChanging(value);
               this.SendPropertyChanging();
               this._Description = value;
               this.SendPropertyChanged("Description");
               this.OnDescriptionChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Picture", DbType = "Image", CanBeNull = true, UpdateCheck = UpdateCheck.Never)]
      public System.Data.Linq.Binary Picture
      {
         get
         {
            return this._Picture;
         }
         set
         {
            if ((this._Picture != value))
            {
               this.OnPictureChanging(value);
               this.SendPropertyChanging();
               this._Picture = value;
               this.SendPropertyChanged("Picture");
               this.OnPictureChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Category_Product", Storage = "_Products", ThisKey = "CategoryID", OtherKey = "CategoryID")]
      public EntitySet<Product> Products
      {
         get
         {
            return this._Products;
         }
         set
         {
            this._Products.Assign(value);
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }

      private void attach_Products(Product entity)
      {
         this.SendPropertyChanging();
         entity.Category = this;
      }

      private void detach_Products(Product entity)
      {
         this.SendPropertyChanging();
         entity.Category = null;
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.Territories")]
   public partial class Territory : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private string _TerritoryID;

      private string _TerritoryDescription;

      private int _RegionID;

      private EntitySet<EmployeeTerritory> _EmployeeTerritories;

      private EntityRef<Region> _Region;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      partial void OnCreated();
      partial void OnTerritoryIDChanging(string value);
      partial void OnTerritoryIDChanged();
      partial void OnTerritoryDescriptionChanging(string value);
      partial void OnTerritoryDescriptionChanged();
      partial void OnRegionIDChanging(int value);
      partial void OnRegionIDChanged();
      #endregion

      public Territory()
      {
         this._EmployeeTerritories = new EntitySet<EmployeeTerritory>(new Action<EmployeeTerritory>(this.attach_EmployeeTerritories), new Action<EmployeeTerritory>(this.detach_EmployeeTerritories));
         this._Region = default(EntityRef<Region>);
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_TerritoryID", DbType = "NVarChar(20) NOT NULL", CanBeNull = false, IsPrimaryKey = true)]
      public string TerritoryID
      {
         get
         {
            return this._TerritoryID;
         }
         set
         {
            if ((this._TerritoryID != value))
            {
               this.OnTerritoryIDChanging(value);
               this.SendPropertyChanging();
               this._TerritoryID = value;
               this.SendPropertyChanged("TerritoryID");
               this.OnTerritoryIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_TerritoryDescription", DbType = "NChar(50) NOT NULL", CanBeNull = false)]
      public string TerritoryDescription
      {
         get
         {
            return this._TerritoryDescription;
         }
         set
         {
            if ((this._TerritoryDescription != value))
            {
               this.OnTerritoryDescriptionChanging(value);
               this.SendPropertyChanging();
               this._TerritoryDescription = value;
               this.SendPropertyChanged("TerritoryDescription");
               this.OnTerritoryDescriptionChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_RegionID", DbType = "Int NOT NULL")]
      public int RegionID
      {
         get
         {
            return this._RegionID;
         }
         set
         {
            if ((this._RegionID != value))
            {
               if (this._Region.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnRegionIDChanging(value);
               this.SendPropertyChanging();
               this._RegionID = value;
               this.SendPropertyChanged("RegionID");
               this.OnRegionIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Territory_EmployeeTerritory", Storage = "_EmployeeTerritories", ThisKey = "TerritoryID", OtherKey = "TerritoryID")]
      public EntitySet<EmployeeTerritory> EmployeeTerritories
      {
         get
         {
            return this._EmployeeTerritories;
         }
         set
         {
            this._EmployeeTerritories.Assign(value);
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Region_Territory", Storage = "_Region", ThisKey = "RegionID", OtherKey = "RegionID", IsForeignKey = true)]
      public Region Region
      {
         get
         {
            return this._Region.Entity;
         }
         set
         {
            Region previousValue = this._Region.Entity;
            if (((previousValue != value)
                     || (this._Region.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._Region.Entity = null;
                  previousValue.Territories.Remove(this);
               }
               this._Region.Entity = value;
               if ((value != null))
               {
                  value.Territories.Add(this);
                  this._RegionID = value.RegionID;
               }
               else
               {
                  this._RegionID = default(int);
               }
               this.SendPropertyChanged("Region");
            }
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }

      private void attach_EmployeeTerritories(EmployeeTerritory entity)
      {
         this.SendPropertyChanging();
         entity.Territory = this;
      }

      private void detach_EmployeeTerritories(EmployeeTerritory entity)
      {
         this.SendPropertyChanging();
         entity.Territory = null;
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.CustomerCustomerDemo")]
   public partial class CustomerCustomerDemo : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private string _CustomerID;

      private string _CustomerTypeID;

      private EntityRef<CustomerDemographic> _CustomerDemographic;

      private EntityRef<Customer> _Customer;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      partial void OnCreated();
      partial void OnCustomerIDChanging(string value);
      partial void OnCustomerIDChanged();
      partial void OnCustomerTypeIDChanging(string value);
      partial void OnCustomerTypeIDChanged();
      #endregion

      public CustomerCustomerDemo()
      {
         this._CustomerDemographic = default(EntityRef<CustomerDemographic>);
         this._Customer = default(EntityRef<Customer>);
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_CustomerID", DbType = "NChar(5) NOT NULL", CanBeNull = false, IsPrimaryKey = true)]
      public string CustomerID
      {
         get
         {
            return this._CustomerID;
         }
         set
         {
            if ((this._CustomerID != value))
            {
               if (this._Customer.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnCustomerIDChanging(value);
               this.SendPropertyChanging();
               this._CustomerID = value;
               this.SendPropertyChanged("CustomerID");
               this.OnCustomerIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_CustomerTypeID", DbType = "NChar(10) NOT NULL", CanBeNull = false, IsPrimaryKey = true)]
      public string CustomerTypeID
      {
         get
         {
            return this._CustomerTypeID;
         }
         set
         {
            if ((this._CustomerTypeID != value))
            {
               if (this._CustomerDemographic.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnCustomerTypeIDChanging(value);
               this.SendPropertyChanging();
               this._CustomerTypeID = value;
               this.SendPropertyChanged("CustomerTypeID");
               this.OnCustomerTypeIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "CustomerDemographic_CustomerCustomerDemo", Storage = "_CustomerDemographic", ThisKey = "CustomerTypeID", OtherKey = "CustomerTypeID", IsForeignKey = true)]
      public CustomerDemographic CustomerDemographic
      {
         get
         {
            return this._CustomerDemographic.Entity;
         }
         set
         {
            CustomerDemographic previousValue = this._CustomerDemographic.Entity;
            if (((previousValue != value)
                     || (this._CustomerDemographic.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._CustomerDemographic.Entity = null;
                  previousValue.CustomerCustomerDemos.Remove(this);
               }
               this._CustomerDemographic.Entity = value;
               if ((value != null))
               {
                  value.CustomerCustomerDemos.Add(this);
                  this._CustomerTypeID = value.CustomerTypeID;
               }
               else
               {
                  this._CustomerTypeID = default(string);
               }
               this.SendPropertyChanged("CustomerDemographic");
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Customer_CustomerCustomerDemo", Storage = "_Customer", ThisKey = "CustomerID", OtherKey = "CustomerID", IsForeignKey = true)]
      public Customer Customer
      {
         get
         {
            return this._Customer.Entity;
         }
         set
         {
            Customer previousValue = this._Customer.Entity;
            if (((previousValue != value)
                     || (this._Customer.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._Customer.Entity = null;
                  previousValue.CustomerCustomerDemos.Remove(this);
               }
               this._Customer.Entity = value;
               if ((value != null))
               {
                  value.CustomerCustomerDemos.Add(this);
                  this._CustomerID = value.CustomerID;
               }
               else
               {
                  this._CustomerID = default(string);
               }
               this.SendPropertyChanged("Customer");
            }
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.CustomerDemographics")]
   public partial class CustomerDemographic : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private string _CustomerTypeID;

      private string _CustomerDesc;

      private EntitySet<CustomerCustomerDemo> _CustomerCustomerDemos;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      partial void OnCreated();
      partial void OnCustomerTypeIDChanging(string value);
      partial void OnCustomerTypeIDChanged();
      partial void OnCustomerDescChanging(string value);
      partial void OnCustomerDescChanged();
      #endregion

      public CustomerDemographic()
      {
         this._CustomerCustomerDemos = new EntitySet<CustomerCustomerDemo>(new Action<CustomerCustomerDemo>(this.attach_CustomerCustomerDemos), new Action<CustomerCustomerDemo>(this.detach_CustomerCustomerDemos));
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_CustomerTypeID", DbType = "NChar(10) NOT NULL", CanBeNull = false, IsPrimaryKey = true)]
      public string CustomerTypeID
      {
         get
         {
            return this._CustomerTypeID;
         }
         set
         {
            if ((this._CustomerTypeID != value))
            {
               this.OnCustomerTypeIDChanging(value);
               this.SendPropertyChanging();
               this._CustomerTypeID = value;
               this.SendPropertyChanged("CustomerTypeID");
               this.OnCustomerTypeIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_CustomerDesc", DbType = "NText", UpdateCheck = UpdateCheck.Never)]
      public string CustomerDesc
      {
         get
         {
            return this._CustomerDesc;
         }
         set
         {
            if ((this._CustomerDesc != value))
            {
               this.OnCustomerDescChanging(value);
               this.SendPropertyChanging();
               this._CustomerDesc = value;
               this.SendPropertyChanged("CustomerDesc");
               this.OnCustomerDescChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "CustomerDemographic_CustomerCustomerDemo", Storage = "_CustomerCustomerDemos", ThisKey = "CustomerTypeID", OtherKey = "CustomerTypeID")]
      public EntitySet<CustomerCustomerDemo> CustomerCustomerDemos
      {
         get
         {
            return this._CustomerCustomerDemos;
         }
         set
         {
            this._CustomerCustomerDemos.Assign(value);
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }

      private void attach_CustomerCustomerDemos(CustomerCustomerDemo entity)
      {
         this.SendPropertyChanging();
         entity.CustomerDemographic = this;
      }

      private void detach_CustomerCustomerDemos(CustomerCustomerDemo entity)
      {
         this.SendPropertyChanging();
         entity.CustomerDemographic = null;
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.Customers")]
   public partial class Customer : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private string _CustomerID;

      private string _CompanyName;

      private string _ContactName;

      private string _ContactTitle;

      private string _Address;

      private string _City;

      private string _Region;

      private string _PostalCode;

      private string _Country;

      private string _Phone;

      private string _Fax;

      private EntitySet<CustomerCustomerDemo> _CustomerCustomerDemos;

      private EntitySet<Order> _Orders;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      partial void OnCreated();
      partial void OnCustomerIDChanging(string value);
      partial void OnCustomerIDChanged();
      partial void OnCompanyNameChanging(string value);
      partial void OnCompanyNameChanged();
      partial void OnContactNameChanging(string value);
      partial void OnContactNameChanged();
      partial void OnContactTitleChanging(string value);
      partial void OnContactTitleChanged();
      partial void OnAddressChanging(string value);
      partial void OnAddressChanged();
      partial void OnCityChanging(string value);
      partial void OnCityChanged();
      partial void OnRegionChanging(string value);
      partial void OnRegionChanged();
      partial void OnPostalCodeChanging(string value);
      partial void OnPostalCodeChanged();
      partial void OnCountryChanging(string value);
      partial void OnCountryChanged();
      partial void OnPhoneChanging(string value);
      partial void OnPhoneChanged();
      partial void OnFaxChanging(string value);
      partial void OnFaxChanged();
      #endregion

      public Customer()
      {
         this._CustomerCustomerDemos = new EntitySet<CustomerCustomerDemo>(new Action<CustomerCustomerDemo>(this.attach_CustomerCustomerDemos), new Action<CustomerCustomerDemo>(this.detach_CustomerCustomerDemos));
         this._Orders = new EntitySet<Order>(new Action<Order>(this.attach_Orders), new Action<Order>(this.detach_Orders));
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_CustomerID", DbType = "NChar(5) NOT NULL", CanBeNull = false, IsPrimaryKey = true)]
      public string CustomerID
      {
         get
         {
            return this._CustomerID;
         }
         set
         {
            if ((this._CustomerID != value))
            {
               this.OnCustomerIDChanging(value);
               this.SendPropertyChanging();
               this._CustomerID = value;
               this.SendPropertyChanged("CustomerID");
               this.OnCustomerIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_CompanyName", DbType = "NVarChar(40) NOT NULL", CanBeNull = false)]
      public string CompanyName
      {
         get
         {
            return this._CompanyName;
         }
         set
         {
            if ((this._CompanyName != value))
            {
               this.OnCompanyNameChanging(value);
               this.SendPropertyChanging();
               this._CompanyName = value;
               this.SendPropertyChanged("CompanyName");
               this.OnCompanyNameChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ContactName", DbType = "NVarChar(30)")]
      public string ContactName
      {
         get
         {
            return this._ContactName;
         }
         set
         {
            if ((this._ContactName != value))
            {
               this.OnContactNameChanging(value);
               this.SendPropertyChanging();
               this._ContactName = value;
               this.SendPropertyChanged("ContactName");
               this.OnContactNameChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ContactTitle", DbType = "NVarChar(30)")]
      public string ContactTitle
      {
         get
         {
            return this._ContactTitle;
         }
         set
         {
            if ((this._ContactTitle != value))
            {
               this.OnContactTitleChanging(value);
               this.SendPropertyChanging();
               this._ContactTitle = value;
               this.SendPropertyChanged("ContactTitle");
               this.OnContactTitleChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Address", DbType = "NVarChar(60)")]
      public string Address
      {
         get
         {
            return this._Address;
         }
         set
         {
            if ((this._Address != value))
            {
               this.OnAddressChanging(value);
               this.SendPropertyChanging();
               this._Address = value;
               this.SendPropertyChanged("Address");
               this.OnAddressChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_City", DbType = "NVarChar(15)")]
      public string City
      {
         get
         {
            return this._City;
         }
         set
         {
            if ((this._City != value))
            {
               this.OnCityChanging(value);
               this.SendPropertyChanging();
               this._City = value;
               this.SendPropertyChanged("City");
               this.OnCityChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Region", DbType = "NVarChar(15)")]
      public string Region
      {
         get
         {
            return this._Region;
         }
         set
         {
            if ((this._Region != value))
            {
               this.OnRegionChanging(value);
               this.SendPropertyChanging();
               this._Region = value;
               this.SendPropertyChanged("Region");
               this.OnRegionChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_PostalCode", DbType = "NVarChar(10)")]
      public string PostalCode
      {
         get
         {
            return this._PostalCode;
         }
         set
         {
            if ((this._PostalCode != value))
            {
               this.OnPostalCodeChanging(value);
               this.SendPropertyChanging();
               this._PostalCode = value;
               this.SendPropertyChanged("PostalCode");
               this.OnPostalCodeChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Country", DbType = "NVarChar(15)")]
      public string Country
      {
         get
         {
            return this._Country;
         }
         set
         {
            if ((this._Country != value))
            {
               this.OnCountryChanging(value);
               this.SendPropertyChanging();
               this._Country = value;
               this.SendPropertyChanged("Country");
               this.OnCountryChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Phone", DbType = "NVarChar(24)")]
      public string Phone
      {
         get
         {
            return this._Phone;
         }
         set
         {
            if ((this._Phone != value))
            {
               this.OnPhoneChanging(value);
               this.SendPropertyChanging();
               this._Phone = value;
               this.SendPropertyChanged("Phone");
               this.OnPhoneChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Fax", DbType = "NVarChar(24)")]
      public string Fax
      {
         get
         {
            return this._Fax;
         }
         set
         {
            if ((this._Fax != value))
            {
               this.OnFaxChanging(value);
               this.SendPropertyChanging();
               this._Fax = value;
               this.SendPropertyChanged("Fax");
               this.OnFaxChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Customer_CustomerCustomerDemo", Storage = "_CustomerCustomerDemos", ThisKey = "CustomerID", OtherKey = "CustomerID")]
      public EntitySet<CustomerCustomerDemo> CustomerCustomerDemos
      {
         get
         {
            return this._CustomerCustomerDemos;
         }
         set
         {
            this._CustomerCustomerDemos.Assign(value);
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Customer_Order", Storage = "_Orders", ThisKey = "CustomerID", OtherKey = "CustomerID")]
      public EntitySet<Order> Orders
      {
         get
         {
            return this._Orders;
         }
         set
         {
            this._Orders.Assign(value);
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }

      private void attach_CustomerCustomerDemos(CustomerCustomerDemo entity)
      {
         this.SendPropertyChanging();
         entity.Customer = this;
      }

      private void detach_CustomerCustomerDemos(CustomerCustomerDemo entity)
      {
         this.SendPropertyChanging();
         entity.Customer = null;
      }

      private void attach_Orders(Order entity)
      {
         this.SendPropertyChanging();
         entity.Customer = this;
      }

      private void detach_Orders(Order entity)
      {
         this.SendPropertyChanging();
         entity.Customer = null;
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.Employees")]
   public partial class Employee : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private int _EmployeeID;

      private string _LastName;

      private string _FirstName;

      private string _Title;

      private string _TitleOfCourtesy;

      private System.Nullable<System.DateTime> _BirthDate;

      private System.Nullable<System.DateTime> _HireDate;

      private string _Address;

      private string _City;

      private string _Region;

      private string _PostalCode;

      private string _Country;

      private string _HomePhone;

      private string _Extension;

      private System.Data.Linq.Binary _Photo;

      private string _Notes;

      private System.Nullable<int> _ReportsTo;

      private string _PhotoPath;

      private EntitySet<Employee> _Employees;

      private EntitySet<EmployeeTerritory> _EmployeeTerritories;

      private EntitySet<Order> _Orders;

      private EntityRef<Employee> _Employee1;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      partial void OnCreated();
      partial void OnEmployeeIDChanging(int value);
      partial void OnEmployeeIDChanged();
      partial void OnLastNameChanging(string value);
      partial void OnLastNameChanged();
      partial void OnFirstNameChanging(string value);
      partial void OnFirstNameChanged();
      partial void OnTitleChanging(string value);
      partial void OnTitleChanged();
      partial void OnTitleOfCourtesyChanging(string value);
      partial void OnTitleOfCourtesyChanged();
      partial void OnBirthDateChanging(System.Nullable<System.DateTime> value);
      partial void OnBirthDateChanged();
      partial void OnHireDateChanging(System.Nullable<System.DateTime> value);
      partial void OnHireDateChanged();
      partial void OnAddressChanging(string value);
      partial void OnAddressChanged();
      partial void OnCityChanging(string value);
      partial void OnCityChanged();
      partial void OnRegionChanging(string value);
      partial void OnRegionChanged();
      partial void OnPostalCodeChanging(string value);
      partial void OnPostalCodeChanged();
      partial void OnCountryChanging(string value);
      partial void OnCountryChanged();
      partial void OnHomePhoneChanging(string value);
      partial void OnHomePhoneChanged();
      partial void OnExtensionChanging(string value);
      partial void OnExtensionChanged();
      partial void OnPhotoChanging(System.Data.Linq.Binary value);
      partial void OnPhotoChanged();
      partial void OnNotesChanging(string value);
      partial void OnNotesChanged();
      partial void OnReportsToChanging(System.Nullable<int> value);
      partial void OnReportsToChanged();
      partial void OnPhotoPathChanging(string value);
      partial void OnPhotoPathChanged();
      #endregion

      public Employee()
      {
         this._Employees = new EntitySet<Employee>(new Action<Employee>(this.attach_Employees), new Action<Employee>(this.detach_Employees));
         this._EmployeeTerritories = new EntitySet<EmployeeTerritory>(new Action<EmployeeTerritory>(this.attach_EmployeeTerritories), new Action<EmployeeTerritory>(this.detach_EmployeeTerritories));
         this._Orders = new EntitySet<Order>(new Action<Order>(this.attach_Orders), new Action<Order>(this.detach_Orders));
         this._Employee1 = default(EntityRef<Employee>);
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_EmployeeID", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]
      public int EmployeeID
      {
         get
         {
            return this._EmployeeID;
         }
         set
         {
            if ((this._EmployeeID != value))
            {
               this.OnEmployeeIDChanging(value);
               this.SendPropertyChanging();
               this._EmployeeID = value;
               this.SendPropertyChanged("EmployeeID");
               this.OnEmployeeIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_LastName", DbType = "NVarChar(20) NOT NULL", CanBeNull = false)]
      public string LastName
      {
         get
         {
            return this._LastName;
         }
         set
         {
            if ((this._LastName != value))
            {
               this.OnLastNameChanging(value);
               this.SendPropertyChanging();
               this._LastName = value;
               this.SendPropertyChanged("LastName");
               this.OnLastNameChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_FirstName", DbType = "NVarChar(10) NOT NULL", CanBeNull = false)]
      public string FirstName
      {
         get
         {
            return this._FirstName;
         }
         set
         {
            if ((this._FirstName != value))
            {
               this.OnFirstNameChanging(value);
               this.SendPropertyChanging();
               this._FirstName = value;
               this.SendPropertyChanged("FirstName");
               this.OnFirstNameChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Title", DbType = "NVarChar(30)")]
      public string Title
      {
         get
         {
            return this._Title;
         }
         set
         {
            if ((this._Title != value))
            {
               this.OnTitleChanging(value);
               this.SendPropertyChanging();
               this._Title = value;
               this.SendPropertyChanged("Title");
               this.OnTitleChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_TitleOfCourtesy", DbType = "NVarChar(25)")]
      public string TitleOfCourtesy
      {
         get
         {
            return this._TitleOfCourtesy;
         }
         set
         {
            if ((this._TitleOfCourtesy != value))
            {
               this.OnTitleOfCourtesyChanging(value);
               this.SendPropertyChanging();
               this._TitleOfCourtesy = value;
               this.SendPropertyChanged("TitleOfCourtesy");
               this.OnTitleOfCourtesyChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_BirthDate", DbType = "DateTime")]
      public System.Nullable<System.DateTime> BirthDate
      {
         get
         {
            return this._BirthDate;
         }
         set
         {
            if ((this._BirthDate != value))
            {
               this.OnBirthDateChanging(value);
               this.SendPropertyChanging();
               this._BirthDate = value;
               this.SendPropertyChanged("BirthDate");
               this.OnBirthDateChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_HireDate", DbType = "DateTime")]
      public System.Nullable<System.DateTime> HireDate
      {
         get
         {
            return this._HireDate;
         }
         set
         {
            if ((this._HireDate != value))
            {
               this.OnHireDateChanging(value);
               this.SendPropertyChanging();
               this._HireDate = value;
               this.SendPropertyChanged("HireDate");
               this.OnHireDateChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Address", DbType = "NVarChar(60)")]
      public string Address
      {
         get
         {
            return this._Address;
         }
         set
         {
            if ((this._Address != value))
            {
               this.OnAddressChanging(value);
               this.SendPropertyChanging();
               this._Address = value;
               this.SendPropertyChanged("Address");
               this.OnAddressChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_City", DbType = "NVarChar(15)")]
      public string City
      {
         get
         {
            return this._City;
         }
         set
         {
            if ((this._City != value))
            {
               this.OnCityChanging(value);
               this.SendPropertyChanging();
               this._City = value;
               this.SendPropertyChanged("City");
               this.OnCityChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Region", DbType = "NVarChar(15)")]
      public string Region
      {
         get
         {
            return this._Region;
         }
         set
         {
            if ((this._Region != value))
            {
               this.OnRegionChanging(value);
               this.SendPropertyChanging();
               this._Region = value;
               this.SendPropertyChanged("Region");
               this.OnRegionChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_PostalCode", DbType = "NVarChar(10)")]
      public string PostalCode
      {
         get
         {
            return this._PostalCode;
         }
         set
         {
            if ((this._PostalCode != value))
            {
               this.OnPostalCodeChanging(value);
               this.SendPropertyChanging();
               this._PostalCode = value;
               this.SendPropertyChanged("PostalCode");
               this.OnPostalCodeChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Country", DbType = "NVarChar(15)")]
      public string Country
      {
         get
         {
            return this._Country;
         }
         set
         {
            if ((this._Country != value))
            {
               this.OnCountryChanging(value);
               this.SendPropertyChanging();
               this._Country = value;
               this.SendPropertyChanged("Country");
               this.OnCountryChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_HomePhone", DbType = "NVarChar(24)")]
      public string HomePhone
      {
         get
         {
            return this._HomePhone;
         }
         set
         {
            if ((this._HomePhone != value))
            {
               this.OnHomePhoneChanging(value);
               this.SendPropertyChanging();
               this._HomePhone = value;
               this.SendPropertyChanged("HomePhone");
               this.OnHomePhoneChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Extension", DbType = "NVarChar(4)")]
      public string Extension
      {
         get
         {
            return this._Extension;
         }
         set
         {
            if ((this._Extension != value))
            {
               this.OnExtensionChanging(value);
               this.SendPropertyChanging();
               this._Extension = value;
               this.SendPropertyChanged("Extension");
               this.OnExtensionChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Photo", DbType = "Image", CanBeNull = true, UpdateCheck = UpdateCheck.Never)]
      public System.Data.Linq.Binary Photo
      {
         get
         {
            return this._Photo;
         }
         set
         {
            if ((this._Photo != value))
            {
               this.OnPhotoChanging(value);
               this.SendPropertyChanging();
               this._Photo = value;
               this.SendPropertyChanged("Photo");
               this.OnPhotoChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Notes", DbType = "NText", UpdateCheck = UpdateCheck.Never)]
      public string Notes
      {
         get
         {
            return this._Notes;
         }
         set
         {
            if ((this._Notes != value))
            {
               this.OnNotesChanging(value);
               this.SendPropertyChanging();
               this._Notes = value;
               this.SendPropertyChanged("Notes");
               this.OnNotesChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ReportsTo", DbType = "Int")]
      public System.Nullable<int> ReportsTo
      {
         get
         {
            return this._ReportsTo;
         }
         set
         {
            if ((this._ReportsTo != value))
            {
               if (this._Employee1.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnReportsToChanging(value);
               this.SendPropertyChanging();
               this._ReportsTo = value;
               this.SendPropertyChanged("ReportsTo");
               this.OnReportsToChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_PhotoPath", DbType = "NVarChar(255)")]
      public string PhotoPath
      {
         get
         {
            return this._PhotoPath;
         }
         set
         {
            if ((this._PhotoPath != value))
            {
               this.OnPhotoPathChanging(value);
               this.SendPropertyChanging();
               this._PhotoPath = value;
               this.SendPropertyChanged("PhotoPath");
               this.OnPhotoPathChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Employee_Employee", Storage = "_Employees", ThisKey = "EmployeeID", OtherKey = "ReportsTo")]
      public EntitySet<Employee> Employees
      {
         get
         {
            return this._Employees;
         }
         set
         {
            this._Employees.Assign(value);
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Employee_EmployeeTerritory", Storage = "_EmployeeTerritories", ThisKey = "EmployeeID", OtherKey = "EmployeeID")]
      public EntitySet<EmployeeTerritory> EmployeeTerritories
      {
         get
         {
            return this._EmployeeTerritories;
         }
         set
         {
            this._EmployeeTerritories.Assign(value);
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Employee_Order", Storage = "_Orders", ThisKey = "EmployeeID", OtherKey = "EmployeeID")]
      public EntitySet<Order> Orders
      {
         get
         {
            return this._Orders;
         }
         set
         {
            this._Orders.Assign(value);
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Employee_Employee", Storage = "_Employee1", ThisKey = "ReportsTo", OtherKey = "EmployeeID", IsForeignKey = true)]
      public Employee Employee1
      {
         get
         {
            return this._Employee1.Entity;
         }
         set
         {
            Employee previousValue = this._Employee1.Entity;
            if (((previousValue != value)
                     || (this._Employee1.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._Employee1.Entity = null;
                  previousValue.Employees.Remove(this);
               }
               this._Employee1.Entity = value;
               if ((value != null))
               {
                  value.Employees.Add(this);
                  this._ReportsTo = value.EmployeeID;
               }
               else
               {
                  this._ReportsTo = default(Nullable<int>);
               }
               this.SendPropertyChanged("Employee1");
            }
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }

      private void attach_Employees(Employee entity)
      {
         this.SendPropertyChanging();
         entity.Employee1 = this;
      }

      private void detach_Employees(Employee entity)
      {
         this.SendPropertyChanging();
         entity.Employee1 = null;
      }

      private void attach_EmployeeTerritories(EmployeeTerritory entity)
      {
         this.SendPropertyChanging();
         entity.Employee = this;
      }

      private void detach_EmployeeTerritories(EmployeeTerritory entity)
      {
         this.SendPropertyChanging();
         entity.Employee = null;
      }

      private void attach_Orders(Order entity)
      {
         this.SendPropertyChanging();
         entity.Employee = this;
      }

      private void detach_Orders(Order entity)
      {
         this.SendPropertyChanging();
         entity.Employee = null;
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.EmployeeTerritories")]
   public partial class EmployeeTerritory : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private int _EmployeeID;

      private string _TerritoryID;

      private EntityRef<Employee> _Employee;

      private EntityRef<Territory> _Territory;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      partial void OnCreated();
      partial void OnEmployeeIDChanging(int value);
      partial void OnEmployeeIDChanged();
      partial void OnTerritoryIDChanging(string value);
      partial void OnTerritoryIDChanged();
      #endregion

      public EmployeeTerritory()
      {
         this._Employee = default(EntityRef<Employee>);
         this._Territory = default(EntityRef<Territory>);
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_EmployeeID", DbType = "Int NOT NULL", IsPrimaryKey = true)]
      public int EmployeeID
      {
         get
         {
            return this._EmployeeID;
         }
         set
         {
            if ((this._EmployeeID != value))
            {
               if (this._Employee.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnEmployeeIDChanging(value);
               this.SendPropertyChanging();
               this._EmployeeID = value;
               this.SendPropertyChanged("EmployeeID");
               this.OnEmployeeIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_TerritoryID", DbType = "NVarChar(20) NOT NULL", CanBeNull = false, IsPrimaryKey = true)]
      public string TerritoryID
      {
         get
         {
            return this._TerritoryID;
         }
         set
         {
            if ((this._TerritoryID != value))
            {
               if (this._Territory.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnTerritoryIDChanging(value);
               this.SendPropertyChanging();
               this._TerritoryID = value;
               this.SendPropertyChanged("TerritoryID");
               this.OnTerritoryIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Employee_EmployeeTerritory", Storage = "_Employee", ThisKey = "EmployeeID", OtherKey = "EmployeeID", IsForeignKey = true)]
      public Employee Employee
      {
         get
         {
            return this._Employee.Entity;
         }
         set
         {
            Employee previousValue = this._Employee.Entity;
            if (((previousValue != value)
                     || (this._Employee.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._Employee.Entity = null;
                  previousValue.EmployeeTerritories.Remove(this);
               }
               this._Employee.Entity = value;
               if ((value != null))
               {
                  value.EmployeeTerritories.Add(this);
                  this._EmployeeID = value.EmployeeID;
               }
               else
               {
                  this._EmployeeID = default(int);
               }
               this.SendPropertyChanged("Employee");
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Territory_EmployeeTerritory", Storage = "_Territory", ThisKey = "TerritoryID", OtherKey = "TerritoryID", IsForeignKey = true)]
      public Territory Territory
      {
         get
         {
            return this._Territory.Entity;
         }
         set
         {
            Territory previousValue = this._Territory.Entity;
            if (((previousValue != value)
                     || (this._Territory.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._Territory.Entity = null;
                  previousValue.EmployeeTerritories.Remove(this);
               }
               this._Territory.Entity = value;
               if ((value != null))
               {
                  value.EmployeeTerritories.Add(this);
                  this._TerritoryID = value.TerritoryID;
               }
               else
               {
                  this._TerritoryID = default(string);
               }
               this.SendPropertyChanged("Territory");
            }
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.[Order Details]")]
   public partial class Order_Detail : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private int _OrderID;

      private int _ProductID;

      private decimal _UnitPrice;

      private short _Quantity;

      private float _Discount;

      private EntityRef<Order> _Order;

      private EntityRef<Product> _Product;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      partial void OnCreated();
      partial void OnOrderIDChanging(int value);
      partial void OnOrderIDChanged();
      partial void OnProductIDChanging(int value);
      partial void OnProductIDChanged();
      partial void OnUnitPriceChanging(decimal value);
      partial void OnUnitPriceChanged();
      partial void OnQuantityChanging(short value);
      partial void OnQuantityChanged();
      partial void OnDiscountChanging(float value);
      partial void OnDiscountChanged();
      #endregion

      public Order_Detail()
      {
         this._Order = default(EntityRef<Order>);
         this._Product = default(EntityRef<Product>);
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_OrderID", DbType = "Int NOT NULL", IsPrimaryKey = true)]
      public int OrderID
      {
         get
         {
            return this._OrderID;
         }
         set
         {
            if ((this._OrderID != value))
            {
               if (this._Order.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnOrderIDChanging(value);
               this.SendPropertyChanging();
               this._OrderID = value;
               this.SendPropertyChanged("OrderID");
               this.OnOrderIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ProductID", DbType = "Int NOT NULL", IsPrimaryKey = true)]
      public int ProductID
      {
         get
         {
            return this._ProductID;
         }
         set
         {
            if ((this._ProductID != value))
            {
               if (this._Product.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnProductIDChanging(value);
               this.SendPropertyChanging();
               this._ProductID = value;
               this.SendPropertyChanged("ProductID");
               this.OnProductIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_UnitPrice", DbType = "Money NOT NULL")]
      public decimal UnitPrice
      {
         get
         {
            return this._UnitPrice;
         }
         set
         {
            if ((this._UnitPrice != value))
            {
               this.OnUnitPriceChanging(value);
               this.SendPropertyChanging();
               this._UnitPrice = value;
               this.SendPropertyChanged("UnitPrice");
               this.OnUnitPriceChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Quantity", DbType = "SmallInt NOT NULL")]
      public short Quantity
      {
         get
         {
            return this._Quantity;
         }
         set
         {
            if ((this._Quantity != value))
            {
               this.OnQuantityChanging(value);
               this.SendPropertyChanging();
               this._Quantity = value;
               this.SendPropertyChanged("Quantity");
               this.OnQuantityChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Discount", DbType = "Real NOT NULL")]
      public float Discount
      {
         get
         {
            return this._Discount;
         }
         set
         {
            if ((this._Discount != value))
            {
               this.OnDiscountChanging(value);
               this.SendPropertyChanging();
               this._Discount = value;
               this.SendPropertyChanged("Discount");
               this.OnDiscountChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Order_Order_Detail", Storage = "_Order", ThisKey = "OrderID", OtherKey = "OrderID", IsForeignKey = true)]
      public Order Order
      {
         get
         {
            return this._Order.Entity;
         }
         set
         {
            Order previousValue = this._Order.Entity;
            if (((previousValue != value)
                     || (this._Order.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._Order.Entity = null;
                  previousValue.Order_Details.Remove(this);
               }
               this._Order.Entity = value;
               if ((value != null))
               {
                  value.Order_Details.Add(this);
                  this._OrderID = value.OrderID;
               }
               else
               {
                  this._OrderID = default(int);
               }
               this.SendPropertyChanged("Order");
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Product_Order_Detail", Storage = "_Product", ThisKey = "ProductID", OtherKey = "ProductID", IsForeignKey = true)]
      public Product Product
      {
         get
         {
            return this._Product.Entity;
         }
         set
         {
            Product previousValue = this._Product.Entity;
            if (((previousValue != value)
                     || (this._Product.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._Product.Entity = null;
                  previousValue.Order_Details.Remove(this);
               }
               this._Product.Entity = value;
               if ((value != null))
               {
                  value.Order_Details.Add(this);
                  this._ProductID = value.ProductID;
               }
               else
               {
                  this._ProductID = default(int);
               }
               this.SendPropertyChanged("Product");
            }
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.Orders")]
   public partial class Order : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private int _OrderID;

      private string _CustomerID;

      private System.Nullable<int> _EmployeeID;

      private System.Nullable<System.DateTime> _OrderDate;

      private System.Nullable<System.DateTime> _RequiredDate;

      private System.Nullable<System.DateTime> _ShippedDate;

      private System.Nullable<int> _ShipVia;

      private System.Nullable<decimal> _Freight;

      private string _ShipName;

      private string _ShipAddress;

      private string _ShipCity;

      private string _ShipRegion;

      private string _ShipPostalCode;

      private string _ShipCountry;

      private EntitySet<Order_Detail> _Order_Details;

      private EntityRef<Customer> _Customer;

      private EntityRef<Employee> _Employee;

      private EntityRef<Shipper> _Shipper;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      partial void OnCreated();
      partial void OnOrderIDChanging(int value);
      partial void OnOrderIDChanged();
      partial void OnCustomerIDChanging(string value);
      partial void OnCustomerIDChanged();
      partial void OnEmployeeIDChanging(System.Nullable<int> value);
      partial void OnEmployeeIDChanged();
      partial void OnOrderDateChanging(System.Nullable<System.DateTime> value);
      partial void OnOrderDateChanged();
      partial void OnRequiredDateChanging(System.Nullable<System.DateTime> value);
      partial void OnRequiredDateChanged();
      partial void OnShippedDateChanging(System.Nullable<System.DateTime> value);
      partial void OnShippedDateChanged();
      partial void OnShipViaChanging(System.Nullable<int> value);
      partial void OnShipViaChanged();
      partial void OnFreightChanging(System.Nullable<decimal> value);
      partial void OnFreightChanged();
      partial void OnShipNameChanging(string value);
      partial void OnShipNameChanged();
      partial void OnShipAddressChanging(string value);
      partial void OnShipAddressChanged();
      partial void OnShipCityChanging(string value);
      partial void OnShipCityChanged();
      partial void OnShipRegionChanging(string value);
      partial void OnShipRegionChanged();
      partial void OnShipPostalCodeChanging(string value);
      partial void OnShipPostalCodeChanged();
      partial void OnShipCountryChanging(string value);
      partial void OnShipCountryChanged();
      #endregion

      public Order()
      {
         this._Order_Details = new EntitySet<Order_Detail>(new Action<Order_Detail>(this.attach_Order_Details), new Action<Order_Detail>(this.detach_Order_Details));
         this._Customer = default(EntityRef<Customer>);
         this._Employee = default(EntityRef<Employee>);
         this._Shipper = default(EntityRef<Shipper>);
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_OrderID", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]
      public int OrderID
      {
         get
         {
            return this._OrderID;
         }
         set
         {
            if ((this._OrderID != value))
            {
               this.OnOrderIDChanging(value);
               this.SendPropertyChanging();
               this._OrderID = value;
               this.SendPropertyChanged("OrderID");
               this.OnOrderIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_CustomerID", DbType = "NChar(5)")]
      public string CustomerID
      {
         get
         {
            return this._CustomerID;
         }
         set
         {
            if ((this._CustomerID != value))
            {
               if (this._Customer.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnCustomerIDChanging(value);
               this.SendPropertyChanging();
               this._CustomerID = value;
               this.SendPropertyChanged("CustomerID");
               this.OnCustomerIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_EmployeeID", DbType = "Int")]
      public System.Nullable<int> EmployeeID
      {
         get
         {
            return this._EmployeeID;
         }
         set
         {
            if ((this._EmployeeID != value))
            {
               if (this._Employee.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnEmployeeIDChanging(value);
               this.SendPropertyChanging();
               this._EmployeeID = value;
               this.SendPropertyChanged("EmployeeID");
               this.OnEmployeeIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_OrderDate", DbType = "DateTime")]
      public System.Nullable<System.DateTime> OrderDate
      {
         get
         {
            return this._OrderDate;
         }
         set
         {
            if ((this._OrderDate != value))
            {
               this.OnOrderDateChanging(value);
               this.SendPropertyChanging();
               this._OrderDate = value;
               this.SendPropertyChanged("OrderDate");
               this.OnOrderDateChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_RequiredDate", DbType = "DateTime")]
      public System.Nullable<System.DateTime> RequiredDate
      {
         get
         {
            return this._RequiredDate;
         }
         set
         {
            if ((this._RequiredDate != value))
            {
               this.OnRequiredDateChanging(value);
               this.SendPropertyChanging();
               this._RequiredDate = value;
               this.SendPropertyChanged("RequiredDate");
               this.OnRequiredDateChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ShippedDate", DbType = "DateTime")]
      public System.Nullable<System.DateTime> ShippedDate
      {
         get
         {
            return this._ShippedDate;
         }
         set
         {
            if ((this._ShippedDate != value))
            {
               this.OnShippedDateChanging(value);
               this.SendPropertyChanging();
               this._ShippedDate = value;
               this.SendPropertyChanged("ShippedDate");
               this.OnShippedDateChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ShipVia", DbType = "Int")]
      public System.Nullable<int> ShipVia
      {
         get
         {
            return this._ShipVia;
         }
         set
         {
            if ((this._ShipVia != value))
            {
               if (this._Shipper.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnShipViaChanging(value);
               this.SendPropertyChanging();
               this._ShipVia = value;
               this.SendPropertyChanged("ShipVia");
               this.OnShipViaChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Freight", DbType = "Money")]
      public System.Nullable<decimal> Freight
      {
         get
         {
            return this._Freight;
         }
         set
         {
            if ((this._Freight != value))
            {
               this.OnFreightChanging(value);
               this.SendPropertyChanging();
               this._Freight = value;
               this.SendPropertyChanged("Freight");
               this.OnFreightChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ShipName", DbType = "NVarChar(40)")]
      public string ShipName
      {
         get
         {
            return this._ShipName;
         }
         set
         {
            if ((this._ShipName != value))
            {
               this.OnShipNameChanging(value);
               this.SendPropertyChanging();
               this._ShipName = value;
               this.SendPropertyChanged("ShipName");
               this.OnShipNameChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ShipAddress", DbType = "NVarChar(60)")]
      public string ShipAddress
      {
         get
         {
            return this._ShipAddress;
         }
         set
         {
            if ((this._ShipAddress != value))
            {
               this.OnShipAddressChanging(value);
               this.SendPropertyChanging();
               this._ShipAddress = value;
               this.SendPropertyChanged("ShipAddress");
               this.OnShipAddressChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ShipCity", DbType = "NVarChar(15)")]
      public string ShipCity
      {
         get
         {
            return this._ShipCity;
         }
         set
         {
            if ((this._ShipCity != value))
            {
               this.OnShipCityChanging(value);
               this.SendPropertyChanging();
               this._ShipCity = value;
               this.SendPropertyChanged("ShipCity");
               this.OnShipCityChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ShipRegion", DbType = "NVarChar(15)")]
      public string ShipRegion
      {
         get
         {
            return this._ShipRegion;
         }
         set
         {
            if ((this._ShipRegion != value))
            {
               this.OnShipRegionChanging(value);
               this.SendPropertyChanging();
               this._ShipRegion = value;
               this.SendPropertyChanged("ShipRegion");
               this.OnShipRegionChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ShipPostalCode", DbType = "NVarChar(10)")]
      public string ShipPostalCode
      {
         get
         {
            return this._ShipPostalCode;
         }
         set
         {
            if ((this._ShipPostalCode != value))
            {
               this.OnShipPostalCodeChanging(value);
               this.SendPropertyChanging();
               this._ShipPostalCode = value;
               this.SendPropertyChanged("ShipPostalCode");
               this.OnShipPostalCodeChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ShipCountry", DbType = "NVarChar(15)")]
      public string ShipCountry
      {
         get
         {
            return this._ShipCountry;
         }
         set
         {
            if ((this._ShipCountry != value))
            {
               this.OnShipCountryChanging(value);
               this.SendPropertyChanging();
               this._ShipCountry = value;
               this.SendPropertyChanged("ShipCountry");
               this.OnShipCountryChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Order_Order_Detail", Storage = "_Order_Details", ThisKey = "OrderID", OtherKey = "OrderID")]
      public EntitySet<Order_Detail> Order_Details
      {
         get
         {
            return this._Order_Details;
         }
         set
         {
            this._Order_Details.Assign(value);
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Customer_Order", Storage = "_Customer", ThisKey = "CustomerID", OtherKey = "CustomerID", IsForeignKey = true)]
      public Customer Customer
      {
         get
         {
            return this._Customer.Entity;
         }
         set
         {
            Customer previousValue = this._Customer.Entity;
            if (((previousValue != value)
                     || (this._Customer.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._Customer.Entity = null;
                  previousValue.Orders.Remove(this);
               }
               this._Customer.Entity = value;
               if ((value != null))
               {
                  value.Orders.Add(this);
                  this._CustomerID = value.CustomerID;
               }
               else
               {
                  this._CustomerID = default(string);
               }
               this.SendPropertyChanged("Customer");
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Employee_Order", Storage = "_Employee", ThisKey = "EmployeeID", OtherKey = "EmployeeID", IsForeignKey = true)]
      public Employee Employee
      {
         get
         {
            return this._Employee.Entity;
         }
         set
         {
            Employee previousValue = this._Employee.Entity;
            if (((previousValue != value)
                     || (this._Employee.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._Employee.Entity = null;
                  previousValue.Orders.Remove(this);
               }
               this._Employee.Entity = value;
               if ((value != null))
               {
                  value.Orders.Add(this);
                  this._EmployeeID = value.EmployeeID;
               }
               else
               {
                  this._EmployeeID = default(Nullable<int>);
               }
               this.SendPropertyChanged("Employee");
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Shipper_Order", Storage = "_Shipper", ThisKey = "ShipVia", OtherKey = "ShipperID", IsForeignKey = true)]
      public Shipper Shipper
      {
         get
         {
            return this._Shipper.Entity;
         }
         set
         {
            Shipper previousValue = this._Shipper.Entity;
            if (((previousValue != value)
                     || (this._Shipper.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._Shipper.Entity = null;
                  previousValue.Orders.Remove(this);
               }
               this._Shipper.Entity = value;
               if ((value != null))
               {
                  value.Orders.Add(this);
                  this._ShipVia = value.ShipperID;
               }
               else
               {
                  this._ShipVia = default(Nullable<int>);
               }
               this.SendPropertyChanged("Shipper");
            }
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }

      private void attach_Order_Details(Order_Detail entity)
      {
         this.SendPropertyChanging();
         entity.Order = this;
      }

      private void detach_Order_Details(Order_Detail entity)
      {
         this.SendPropertyChanging();
         entity.Order = null;
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.Products")]
   public partial class Product : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private int _ProductID;

      private string _ProductName;

      private System.Nullable<int> _SupplierID;

      private System.Nullable<int> _CategoryID;

      private string _QuantityPerUnit;

      private System.Nullable<decimal> _UnitPrice;

      private System.Nullable<short> _UnitsInStock;

      private System.Nullable<short> _UnitsOnOrder;

      private System.Nullable<short> _ReorderLevel;

      private bool _Discontinued;

      private EntitySet<Order_Detail> _Order_Details;

      private EntityRef<Category> _Category;

      private EntityRef<Supplier> _Supplier;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      partial void OnCreated();
      partial void OnProductIDChanging(int value);
      partial void OnProductIDChanged();
      partial void OnProductNameChanging(string value);
      partial void OnProductNameChanged();
      partial void OnSupplierIDChanging(System.Nullable<int> value);
      partial void OnSupplierIDChanged();
      partial void OnCategoryIDChanging(System.Nullable<int> value);
      partial void OnCategoryIDChanged();
      partial void OnQuantityPerUnitChanging(string value);
      partial void OnQuantityPerUnitChanged();
      partial void OnUnitPriceChanging(System.Nullable<decimal> value);
      partial void OnUnitPriceChanged();
      partial void OnUnitsInStockChanging(System.Nullable<short> value);
      partial void OnUnitsInStockChanged();
      partial void OnUnitsOnOrderChanging(System.Nullable<short> value);
      partial void OnUnitsOnOrderChanged();
      partial void OnReorderLevelChanging(System.Nullable<short> value);
      partial void OnReorderLevelChanged();
      partial void OnDiscontinuedChanging(bool value);
      partial void OnDiscontinuedChanged();
      #endregion

      public Product()
      {
         this._Order_Details = new EntitySet<Order_Detail>(new Action<Order_Detail>(this.attach_Order_Details), new Action<Order_Detail>(this.detach_Order_Details));
         this._Category = default(EntityRef<Category>);
         this._Supplier = default(EntityRef<Supplier>);
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ProductID", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]
      public int ProductID
      {
         get
         {
            return this._ProductID;
         }
         set
         {
            if ((this._ProductID != value))
            {
               this.OnProductIDChanging(value);
               this.SendPropertyChanging();
               this._ProductID = value;
               this.SendPropertyChanged("ProductID");
               this.OnProductIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ProductName", DbType = "NVarChar(40) NOT NULL", CanBeNull = false)]
      public string ProductName
      {
         get
         {
            return this._ProductName;
         }
         set
         {
            if ((this._ProductName != value))
            {
               this.OnProductNameChanging(value);
               this.SendPropertyChanging();
               this._ProductName = value;
               this.SendPropertyChanged("ProductName");
               this.OnProductNameChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_SupplierID", DbType = "Int")]
      public System.Nullable<int> SupplierID
      {
         get
         {
            return this._SupplierID;
         }
         set
         {
            if ((this._SupplierID != value))
            {
               if (this._Supplier.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnSupplierIDChanging(value);
               this.SendPropertyChanging();
               this._SupplierID = value;
               this.SendPropertyChanged("SupplierID");
               this.OnSupplierIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_CategoryID", DbType = "Int")]
      public System.Nullable<int> CategoryID
      {
         get
         {
            return this._CategoryID;
         }
         set
         {
            if ((this._CategoryID != value))
            {
               if (this._Category.HasLoadedOrAssignedValue)
               {
                  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
               }
               this.OnCategoryIDChanging(value);
               this.SendPropertyChanging();
               this._CategoryID = value;
               this.SendPropertyChanged("CategoryID");
               this.OnCategoryIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_QuantityPerUnit", DbType = "NVarChar(20)")]
      public string QuantityPerUnit
      {
         get
         {
            return this._QuantityPerUnit;
         }
         set
         {
            if ((this._QuantityPerUnit != value))
            {
               this.OnQuantityPerUnitChanging(value);
               this.SendPropertyChanging();
               this._QuantityPerUnit = value;
               this.SendPropertyChanged("QuantityPerUnit");
               this.OnQuantityPerUnitChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_UnitPrice", DbType = "Money")]
      public System.Nullable<decimal> UnitPrice
      {
         get
         {
            return this._UnitPrice;
         }
         set
         {
            if ((this._UnitPrice != value))
            {
               this.OnUnitPriceChanging(value);
               this.SendPropertyChanging();
               this._UnitPrice = value;
               this.SendPropertyChanged("UnitPrice");
               this.OnUnitPriceChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_UnitsInStock", DbType = "SmallInt")]
      public System.Nullable<short> UnitsInStock
      {
         get
         {
            return this._UnitsInStock;
         }
         set
         {
            if ((this._UnitsInStock != value))
            {
               this.OnUnitsInStockChanging(value);
               this.SendPropertyChanging();
               this._UnitsInStock = value;
               this.SendPropertyChanged("UnitsInStock");
               this.OnUnitsInStockChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_UnitsOnOrder", DbType = "SmallInt")]
      public System.Nullable<short> UnitsOnOrder
      {
         get
         {
            return this._UnitsOnOrder;
         }
         set
         {
            if ((this._UnitsOnOrder != value))
            {
               this.OnUnitsOnOrderChanging(value);
               this.SendPropertyChanging();
               this._UnitsOnOrder = value;
               this.SendPropertyChanged("UnitsOnOrder");
               this.OnUnitsOnOrderChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ReorderLevel", DbType = "SmallInt")]
      public System.Nullable<short> ReorderLevel
      {
         get
         {
            return this._ReorderLevel;
         }
         set
         {
            if ((this._ReorderLevel != value))
            {
               this.OnReorderLevelChanging(value);
               this.SendPropertyChanging();
               this._ReorderLevel = value;
               this.SendPropertyChanged("ReorderLevel");
               this.OnReorderLevelChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Discontinued", DbType = "Bit NOT NULL")]
      public bool Discontinued
      {
         get
         {
            return this._Discontinued;
         }
         set
         {
            if ((this._Discontinued != value))
            {
               this.OnDiscontinuedChanging(value);
               this.SendPropertyChanging();
               this._Discontinued = value;
               this.SendPropertyChanged("Discontinued");
               this.OnDiscontinuedChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Product_Order_Detail", Storage = "_Order_Details", ThisKey = "ProductID", OtherKey = "ProductID")]
      public EntitySet<Order_Detail> Order_Details
      {
         get
         {
            return this._Order_Details;
         }
         set
         {
            this._Order_Details.Assign(value);
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Category_Product", Storage = "_Category", ThisKey = "CategoryID", OtherKey = "CategoryID", IsForeignKey = true)]
      public Category Category
      {
         get
         {
            return this._Category.Entity;
         }
         set
         {
            Category previousValue = this._Category.Entity;
            if (((previousValue != value)
                     || (this._Category.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._Category.Entity = null;
                  previousValue.Products.Remove(this);
               }
               this._Category.Entity = value;
               if ((value != null))
               {
                  value.Products.Add(this);
                  this._CategoryID = value.CategoryID;
               }
               else
               {
                  this._CategoryID = default(Nullable<int>);
               }
               this.SendPropertyChanged("Category");
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Supplier_Product", Storage = "_Supplier", ThisKey = "SupplierID", OtherKey = "SupplierID", IsForeignKey = true)]
      public Supplier Supplier
      {
         get
         {
            return this._Supplier.Entity;
         }
         set
         {
            Supplier previousValue = this._Supplier.Entity;
            if (((previousValue != value)
                     || (this._Supplier.HasLoadedOrAssignedValue == false)))
            {
               this.SendPropertyChanging();
               if ((previousValue != null))
               {
                  this._Supplier.Entity = null;
                  previousValue.Products.Remove(this);
               }
               this._Supplier.Entity = value;
               if ((value != null))
               {
                  value.Products.Add(this);
                  this._SupplierID = value.SupplierID;
               }
               else
               {
                  this._SupplierID = default(Nullable<int>);
               }
               this.SendPropertyChanged("Supplier");
            }
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }

      private void attach_Order_Details(Order_Detail entity)
      {
         this.SendPropertyChanging();
         entity.Product = this;
      }

      private void detach_Order_Details(Order_Detail entity)
      {
         this.SendPropertyChanging();
         entity.Product = null;
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.Region")]
   public partial class Region : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private int _RegionID;

      private string _RegionDescription;

      private EntitySet<Territory> _Territories;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      partial void OnCreated();
      partial void OnRegionIDChanging(int value);
      partial void OnRegionIDChanged();
      partial void OnRegionDescriptionChanging(string value);
      partial void OnRegionDescriptionChanged();
      #endregion

      public Region()
      {
         this._Territories = new EntitySet<Territory>(new Action<Territory>(this.attach_Territories), new Action<Territory>(this.detach_Territories));
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_RegionID", DbType = "Int NOT NULL", IsPrimaryKey = true)]
      public int RegionID
      {
         get
         {
            return this._RegionID;
         }
         set
         {
            if ((this._RegionID != value))
            {
               this.OnRegionIDChanging(value);
               this.SendPropertyChanging();
               this._RegionID = value;
               this.SendPropertyChanged("RegionID");
               this.OnRegionIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_RegionDescription", DbType = "NChar(50) NOT NULL", CanBeNull = false)]
      public string RegionDescription
      {
         get
         {
            return this._RegionDescription;
         }
         set
         {
            if ((this._RegionDescription != value))
            {
               this.OnRegionDescriptionChanging(value);
               this.SendPropertyChanging();
               this._RegionDescription = value;
               this.SendPropertyChanged("RegionDescription");
               this.OnRegionDescriptionChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Region_Territory", Storage = "_Territories", ThisKey = "RegionID", OtherKey = "RegionID")]
      public EntitySet<Territory> Territories
      {
         get
         {
            return this._Territories;
         }
         set
         {
            this._Territories.Assign(value);
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }

      private void attach_Territories(Territory entity)
      {
         this.SendPropertyChanging();
         entity.Region = this;
      }

      private void detach_Territories(Territory entity)
      {
         this.SendPropertyChanging();
         entity.Region = null;
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.Shippers")]
   public partial class Shipper : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private int _ShipperID;

      private string _CompanyName;

      private string _Phone;

      private EntitySet<Order> _Orders;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      partial void OnCreated();
      partial void OnShipperIDChanging(int value);
      partial void OnShipperIDChanged();
      partial void OnCompanyNameChanging(string value);
      partial void OnCompanyNameChanged();
      partial void OnPhoneChanging(string value);
      partial void OnPhoneChanged();
      #endregion

      public Shipper()
      {
         this._Orders = new EntitySet<Order>(new Action<Order>(this.attach_Orders), new Action<Order>(this.detach_Orders));
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ShipperID", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]
      public int ShipperID
      {
         get
         {
            return this._ShipperID;
         }
         set
         {
            if ((this._ShipperID != value))
            {
               this.OnShipperIDChanging(value);
               this.SendPropertyChanging();
               this._ShipperID = value;
               this.SendPropertyChanged("ShipperID");
               this.OnShipperIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_CompanyName", DbType = "NVarChar(40) NOT NULL", CanBeNull = false)]
      public string CompanyName
      {
         get
         {
            return this._CompanyName;
         }
         set
         {
            if ((this._CompanyName != value))
            {
               this.OnCompanyNameChanging(value);
               this.SendPropertyChanging();
               this._CompanyName = value;
               this.SendPropertyChanged("CompanyName");
               this.OnCompanyNameChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Phone", DbType = "NVarChar(24)")]
      public string Phone
      {
         get
         {
            return this._Phone;
         }
         set
         {
            if ((this._Phone != value))
            {
               this.OnPhoneChanging(value);
               this.SendPropertyChanging();
               this._Phone = value;
               this.SendPropertyChanged("Phone");
               this.OnPhoneChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Shipper_Order", Storage = "_Orders", ThisKey = "ShipperID", OtherKey = "ShipVia")]
      public EntitySet<Order> Orders
      {
         get
         {
            return this._Orders;
         }
         set
         {
            this._Orders.Assign(value);
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }

      private void attach_Orders(Order entity)
      {
         this.SendPropertyChanging();
         entity.Shipper = this;
      }

      private void detach_Orders(Order entity)
      {
         this.SendPropertyChanging();
         entity.Shipper = null;
      }
   }

   [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.Suppliers")]
   public partial class Supplier : INotifyPropertyChanging, INotifyPropertyChanged
   {

      private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

      private int _SupplierID;

      private string _CompanyName;

      private string _ContactName;

      private string _ContactTitle;

      private string _Address;

      private string _City;

      private string _Region;

      private string _PostalCode;

      private string _Country;

      private string _Phone;

      private string _Fax;

      private string _HomePage;

      private EntitySet<Product> _Products;

      #region Extensibility Method Definitions
      partial void OnLoaded();
      partial void OnValidate(System.Data.Linq.ChangeAction action);
      partial void OnCreated();
      partial void OnSupplierIDChanging(int value);
      partial void OnSupplierIDChanged();
      partial void OnCompanyNameChanging(string value);
      partial void OnCompanyNameChanged();
      partial void OnContactNameChanging(string value);
      partial void OnContactNameChanged();
      partial void OnContactTitleChanging(string value);
      partial void OnContactTitleChanged();
      partial void OnAddressChanging(string value);
      partial void OnAddressChanged();
      partial void OnCityChanging(string value);
      partial void OnCityChanged();
      partial void OnRegionChanging(string value);
      partial void OnRegionChanged();
      partial void OnPostalCodeChanging(string value);
      partial void OnPostalCodeChanged();
      partial void OnCountryChanging(string value);
      partial void OnCountryChanged();
      partial void OnPhoneChanging(string value);
      partial void OnPhoneChanged();
      partial void OnFaxChanging(string value);
      partial void OnFaxChanged();
      partial void OnHomePageChanging(string value);
      partial void OnHomePageChanged();
      #endregion

      public Supplier()
      {
         this._Products = new EntitySet<Product>(new Action<Product>(this.attach_Products), new Action<Product>(this.detach_Products));
         OnCreated();
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_SupplierID", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]
      public int SupplierID
      {
         get
         {
            return this._SupplierID;
         }
         set
         {
            if ((this._SupplierID != value))
            {
               this.OnSupplierIDChanging(value);
               this.SendPropertyChanging();
               this._SupplierID = value;
               this.SendPropertyChanged("SupplierID");
               this.OnSupplierIDChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_CompanyName", DbType = "NVarChar(40) NOT NULL", CanBeNull = false)]
      public string CompanyName
      {
         get
         {
            return this._CompanyName;
         }
         set
         {
            if ((this._CompanyName != value))
            {
               this.OnCompanyNameChanging(value);
               this.SendPropertyChanging();
               this._CompanyName = value;
               this.SendPropertyChanged("CompanyName");
               this.OnCompanyNameChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ContactName", DbType = "NVarChar(30)")]
      public string ContactName
      {
         get
         {
            return this._ContactName;
         }
         set
         {
            if ((this._ContactName != value))
            {
               this.OnContactNameChanging(value);
               this.SendPropertyChanging();
               this._ContactName = value;
               this.SendPropertyChanged("ContactName");
               this.OnContactNameChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ContactTitle", DbType = "NVarChar(30)")]
      public string ContactTitle
      {
         get
         {
            return this._ContactTitle;
         }
         set
         {
            if ((this._ContactTitle != value))
            {
               this.OnContactTitleChanging(value);
               this.SendPropertyChanging();
               this._ContactTitle = value;
               this.SendPropertyChanged("ContactTitle");
               this.OnContactTitleChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Address", DbType = "NVarChar(60)")]
      public string Address
      {
         get
         {
            return this._Address;
         }
         set
         {
            if ((this._Address != value))
            {
               this.OnAddressChanging(value);
               this.SendPropertyChanging();
               this._Address = value;
               this.SendPropertyChanged("Address");
               this.OnAddressChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_City", DbType = "NVarChar(15)")]
      public string City
      {
         get
         {
            return this._City;
         }
         set
         {
            if ((this._City != value))
            {
               this.OnCityChanging(value);
               this.SendPropertyChanging();
               this._City = value;
               this.SendPropertyChanged("City");
               this.OnCityChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Region", DbType = "NVarChar(15)")]
      public string Region
      {
         get
         {
            return this._Region;
         }
         set
         {
            if ((this._Region != value))
            {
               this.OnRegionChanging(value);
               this.SendPropertyChanging();
               this._Region = value;
               this.SendPropertyChanged("Region");
               this.OnRegionChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_PostalCode", DbType = "NVarChar(10)")]
      public string PostalCode
      {
         get
         {
            return this._PostalCode;
         }
         set
         {
            if ((this._PostalCode != value))
            {
               this.OnPostalCodeChanging(value);
               this.SendPropertyChanging();
               this._PostalCode = value;
               this.SendPropertyChanged("PostalCode");
               this.OnPostalCodeChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Country", DbType = "NVarChar(15)")]
      public string Country
      {
         get
         {
            return this._Country;
         }
         set
         {
            if ((this._Country != value))
            {
               this.OnCountryChanging(value);
               this.SendPropertyChanging();
               this._Country = value;
               this.SendPropertyChanged("Country");
               this.OnCountryChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Phone", DbType = "NVarChar(24)")]
      public string Phone
      {
         get
         {
            return this._Phone;
         }
         set
         {
            if ((this._Phone != value))
            {
               this.OnPhoneChanging(value);
               this.SendPropertyChanging();
               this._Phone = value;
               this.SendPropertyChanged("Phone");
               this.OnPhoneChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Fax", DbType = "NVarChar(24)")]
      public string Fax
      {
         get
         {
            return this._Fax;
         }
         set
         {
            if ((this._Fax != value))
            {
               this.OnFaxChanging(value);
               this.SendPropertyChanging();
               this._Fax = value;
               this.SendPropertyChanged("Fax");
               this.OnFaxChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_HomePage", DbType = "NText", UpdateCheck = UpdateCheck.Never)]
      public string HomePage
      {
         get
         {
            return this._HomePage;
         }
         set
         {
            if ((this._HomePage != value))
            {
               this.OnHomePageChanging(value);
               this.SendPropertyChanging();
               this._HomePage = value;
               this.SendPropertyChanged("HomePage");
               this.OnHomePageChanged();
            }
         }
      }

      [global::System.Data.Linq.Mapping.AssociationAttribute(Name = "Supplier_Product", Storage = "_Products", ThisKey = "SupplierID", OtherKey = "SupplierID")]
      public EntitySet<Product> Products
      {
         get
         {
            return this._Products;
         }
         set
         {
            this._Products.Assign(value);
         }
      }

      public event PropertyChangingEventHandler PropertyChanging;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void SendPropertyChanging()
      {
         if ((this.PropertyChanging != null))
         {
            this.PropertyChanging(this, emptyChangingEventArgs);
         }
      }

      protected virtual void SendPropertyChanged(String propertyName)
      {
         if ((this.PropertyChanged != null))
         {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
      }

      private void attach_Products(Product entity)
      {
         this.SendPropertyChanging();
         entity.Supplier = this;
      }

      private void detach_Products(Product entity)
      {
         this.SendPropertyChanging();
         entity.Supplier = null;
      }
   }
}
#pragma warning restore 1591