コード例 #1
0
        public void T1_RevertDirectedReferenceCollection()
        {
            var ctx = Default.DataContext();

            // get data
            var employee = ctx.Employees
                           .AsQueryable()
                           .Include("Territories")
                           .Single(e => e.EmployeeID == EMPLOYEE_ID);

            var territory1 = ctx.Territories.AsQueryable().Single(t => t.TerritoryID == TERRITORY1_ID);
            var territory2 = ctx.Territories.AsQueryable().Single(t => t.TerritoryID == TERRITORY2_ID);
            var territory3 = ctx.Territories.AsQueryable().Single(t => t.TerritoryID == TERRITORY3_ID);

            // check initial state
            Expect(employee, Is.Not.Null);
            Expect(territory1, Is.Not.Null);
            Expect(territory2, Is.Not.Null);
            Expect(territory3, Is.Not.Null);

            Expect(employee.Territories, Is.Not.Empty);
            Expect(employee.Territories.Count, Is.EqualTo(2));

            Assert.Contains(territory1, employee.Territories.ToArray());
            Assert.Contains(territory2, employee.Territories.ToArray());

            Expect(employee.HasChanges, Is.False);
            Expect(employee.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // add one new
            employee.Territories.Add(territory3);

            Expect(employee.Territories.Count, Is.EqualTo(3));
            Assert.Contains(territory3, employee.Territories.ToArray());

            Expect(employee.HasChanges, Is.True);
            Expect(employee.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(territory3.HasChanges, Is.False);
            Expect(territory3.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // revert
            employee.RevertChanges();

            Expect(employee.Territories.Count, Is.EqualTo(2));

            Expect(employee.HasChanges, Is.False);
            Expect(employee.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(territory3.HasChanges, Is.False);
            Expect(territory3.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // remove one existing
            employee.Territories.Remove(territory2);

            Expect(employee.Territories.Count, Is.EqualTo(1));

            Expect(employee.HasChanges, Is.True);
            Expect(employee.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(territory2.HasChanges, Is.False);
            Expect(territory2.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // revert
            employee.RevertChanges();

            Expect(employee.Territories.Count, Is.EqualTo(2));

            Expect(employee.HasChanges, Is.False);
            Expect(employee.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(territory2.HasChanges, Is.False);
            Expect(territory2.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // remove all existing, add one new, and re-add one of the old
            employee.Territories.Clear();

            Expect(employee.Territories.Count, Is.EqualTo(0));
            Expect(employee.Territories, Is.Empty);

            Expect(employee.HasChanges, Is.True);
            Expect(employee.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            employee.Territories.Add(territory3);
            employee.Territories.Add(territory2);

            Expect(territory1.HasChanges, Is.False);
            Expect(territory2.HasChanges, Is.False);
            Expect(territory3.HasChanges, Is.False);
            Expect(territory1.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));
            Expect(territory2.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));
            Expect(territory3.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // revert
            employee.RevertChanges();

            Expect(employee.Territories.Count, Is.EqualTo(2));

            Expect(employee.HasChanges, Is.False);
            Expect(employee.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(territory1.HasChanges, Is.False);
            Expect(territory2.HasChanges, Is.False);
            Expect(territory3.HasChanges, Is.False);
            Expect(territory1.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));
            Expect(territory2.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));
            Expect(territory3.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // add one new, remove one existing, and accept changes
            Assert.Contains(territory1, employee.Territories.ToArray());
            Assert.Contains(territory2, employee.Territories.ToArray());

            employee.Territories.Add(territory3);
            employee.Territories.Remove(territory2);

            Expect(employee.Territories.Count, Is.EqualTo(2));
            Expect(employee.Territories, Is.Not.Empty);

            Expect(employee.HasChanges, Is.True);
            Expect(employee.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Assert.Contains(territory1, employee.Territories.ToArray());
            Assert.Contains(territory3, employee.Territories.ToArray());

            employee.AcceptChanges();

            Expect(employee.HasChanges, Is.False);
            Expect(employee.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // revert
            employee.RevertChanges();

            Expect(employee.Territories.Count, Is.EqualTo(2));
            Assert.Contains(territory1, employee.Territories.ToArray());
            Assert.Contains(territory3, employee.Territories.ToArray());
        }
コード例 #2
0
        public void SetReferenceToAddedEntity()
        {
            var ctx = Default.DataContext();

            // load suppliers
            ctx.Suppliers.AsQueryable().WhereIn(s => s.SupplierID, SUPPLIER1_ID, SUPPLIER2_ID, SUPPLIER3_ID, SUPPLIER4_ID).Execute();

            var supplier1 = ctx.Suppliers.SingleOrDefault(s => s.SupplierID == SUPPLIER1_ID);
            var supplier2 = ctx.Suppliers.SingleOrDefault(s => s.SupplierID == SUPPLIER2_ID);
            var supplier3 = ctx.Suppliers.SingleOrDefault(s => s.SupplierID == SUPPLIER3_ID);
            var supplier4 = ctx.Suppliers.SingleOrDefault(s => s.SupplierID == SUPPLIER4_ID);

            Expect(supplier1, Is.Not.Null);
            Expect(supplier2, Is.Not.Null);
            Expect(supplier3, Is.Not.Null);
            Expect(supplier4, Is.Not.Null);


            // add new product
            var product = new Product();

            ctx.Products.Add(product);

            Expect(product.HasChanges, Is.True);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Added));


            // set supplier reference (existing supplier)
            product.Supplier = supplier1;

            Expect(product.HasChanges, Is.True); // product has changes (state is added)
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Added));

            Expect(supplier1.HasChanges, Is.True); // supplier1 has changes (state is unchanged)
            Expect(supplier1.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(supplier2.HasChanges, Is.False); // supplier2 has no changes (state is unchanged)
            Expect(supplier2.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // set different supplier reference (existing supplier)
            product.Supplier = supplier2;

            Expect(product.HasChanges, Is.True); // product has changes (state is added)
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Added));

            Expect(supplier1.HasChanges, Is.False); // supplier1 has no changes anymore (state is unchanged)
            Expect(supplier1.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(supplier2.HasChanges, Is.True); // supplier2 has changes now (state is unchanged)
            Expect(supplier2.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // set different supplier reference (existing supplier)
            product.Supplier = supplier3;

            Expect(product.HasChanges, Is.True);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Added));


            // set different supplier reference (existing supplier)
            product.Supplier = supplier4;

            Expect(product.HasChanges, Is.True);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Added));


            // set supplier reference to null
            product.Supplier = null;

            Expect(product.HasChanges, Is.True);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Added));


            // set different supplier reference (existing supplier)
            product.Supplier = supplier4;

            Expect(product.HasChanges, Is.True);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Added));


            // create and add new supplier to context (using factory method)
            var newSupplier1 = ctx.Suppliers.CreateNew();

            Expect(newSupplier1.HasChanges, Is.True);
            Expect(newSupplier1.ChangeTracker.State, Is.EqualTo(ObjectState.Added));


            // set different supplier reference (new supplier)
            product.Supplier = newSupplier1;

            Expect(product.HasChanges, Is.True);
            Expect(newSupplier1.HasChanges, Is.True);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Added));
            Expect(newSupplier1.ChangeTracker.State, Is.EqualTo(ObjectState.Added));


            // create new supplier without adding it to context
            var newSupplier2 = new Supplier();

            Expect(newSupplier2.HasChanges, Is.True);
            Expect(newSupplier2.ChangeTracker.State, Is.EqualTo(ObjectState.Added));


            // set different supplier reference (new supplier)
            product.Supplier = newSupplier2;

            Expect(product.HasChanges, Is.True);
            Expect(newSupplier2.HasChanges, Is.True);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Added));
            Expect(newSupplier2.ChangeTracker.State, Is.EqualTo(ObjectState.Added));
        }
コード例 #3
0
        public void T1_RevertDirectedReference()
        {
            var ctx = Default.DataContext();

            // get data
            var product = ctx.Products
                          .AsQueryable()
                          .Include("Category")
                          .Single(p => p.ProductID == PROD_ID);

            var oldCategory = ctx.Categories.AsQueryable().Single(c => c.CategoryID == CAT_OLD_ID);
            var newCategory = ctx.Categories.AsQueryable().Single(c => c.CategoryID == CAT_NEW_ID);

            // check initial state
            Expect(product.CategoryID, Is.EqualTo(CAT_OLD_ID));
            Expect(product.Category, Is.EqualTo(oldCategory));

            Expect(product.HasChanges, Is.False);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // set new
            product.Category = newCategory;

            Expect(product.CategoryID, Is.EqualTo(CAT_NEW_ID));
            Expect(product.Category, Is.EqualTo(newCategory));

            Expect(product.HasChanges, Is.True);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Modified));


            // revert to old
            product.RevertChanges();

            Expect(product.CategoryID, Is.EqualTo(CAT_OLD_ID));
            Expect(product.Category, Is.EqualTo(oldCategory));

            Expect(product.HasChanges, Is.False);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // set null
            product.Category = null;

            Expect(product.CategoryID, Is.Null);
            Expect(product.Category, Is.Null);

            Expect(product.HasChanges, Is.True);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Modified));


            // revert to old
            product.RevertChanges();

            Expect(product.CategoryID, Is.EqualTo(CAT_OLD_ID));
            Expect(product.Category, Is.EqualTo(oldCategory));

            Expect(product.HasChanges, Is.False);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // set null and accept
            product.Category = null;
            product.AcceptChanges();

            Expect(product.CategoryID, Is.Null);
            Expect(product.Category, Is.Null);

            Expect(product.HasChanges, Is.False);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // set new
            product.Category = newCategory;

            Expect(product.CategoryID, Is.EqualTo(CAT_NEW_ID));
            Expect(product.Category, Is.EqualTo(newCategory));

            Expect(product.HasChanges, Is.True);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Modified));


            // revert to null
            product.RevertChanges();

            Expect(product.CategoryID, Is.Null);
            Expect(product.Category, Is.Null);

            Expect(product.HasChanges, Is.False);
            Expect(product.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));
        }
コード例 #4
0
        public void IncludeOnForChangedRelatedEntities()
        {
            var ctx = Default.DataContext();

            var prodcount = ctx.Products.AsQueryable().Count();

            //create new category and new supplier for a new product and save together
            var newCategory = ctx.Categories.CreateNew(false);
            var newSupplier = ctx.Suppliers.CreateNew(false);
            var newProduct  = ctx.Products.CreateNew(false);

            newCategory.CategoryName = "NewCategory";
            newCategory.Description  = "NewCategory for Test Description";

            Expect(newCategory.HasChanges, Is.True);
            Expect(newCategory.ChangeTracker.State, Is.EqualTo(ObjectState.Added));

            newSupplier.CompanyName  = "TestCompanyName";
            newSupplier.Region       = "TestRegion";
            newSupplier.PostalCode   = "007007";
            newSupplier.Phone        = "1234567890";
            newSupplier.ContactName  = "TestContact";
            newSupplier.ContactTitle = "TestTitle";
            newSupplier.City         = "TestCity";
            newSupplier.Address      = "TestAdress";
            newSupplier.Country      = "TestCountry";

            Expect(newSupplier.HasChanges, Is.True);
            Expect(newSupplier.ChangeTracker.State, Is.EqualTo(ObjectState.Added));

            newProduct.ProductName     = "TestName";
            newProduct.QuantityPerUnit = "2";
            newProduct.UnitPrice       = 33;
            newProduct.Discontinued    = false;
            newProduct.ReorderLevel    = 0;
            newProduct.UnitsInStock    = 3;
            newProduct.UnitsOnOrder    = 0;
            newProduct.Category        = newCategory;
            newProduct.Supplier        = newSupplier;

            ctx.Add(newCategory);
            ctx.Add(newSupplier);
            ctx.Add(newProduct);

            //save all in one call
            ctx.SaveChanges();

            // check existance in entity set
            var catElement = ctx.Categories.GetAllEntities().FirstOrDefault(p => object.ReferenceEquals(p, newCategory));

            Expect(catElement, Is.Not.Null);
            var suppElement = ctx.Suppliers.GetAllEntities().FirstOrDefault(p => object.ReferenceEquals(p, newSupplier));

            Expect(suppElement, Is.Not.Null);
            var prodElement = ctx.Products.GetAllEntities().FirstOrDefault(p => object.ReferenceEquals(p, newProduct));

            Expect(prodElement, Is.Not.Null);

            //delete created entities
            ctx.Delete(newProduct);
            ctx.Delete(newSupplier);
            ctx.Delete(newCategory);

            //save deletes in one call (execution order must match for delete to be successful)
            //have to supply a secret to make the delete pass thru clientinfo test logic in service
            var clientInfo = new ClientInfo();

            clientInfo["ForceDelete"] = "yes please";


            ServerValidationException serverValidationException = null;

            try
            {
                ctx.SaveChanges(clientInfo: clientInfo);
            }
            catch (ServerValidationException ex)
            {
                serverValidationException = ex;
                throw;
            }
            catch (UpdateException ex)
            {
                foreach (var se in ex.StateEntries)
                {
                    string error = string.Empty;
                    if (se.Entity != null)
                    {
                        foreach (var er in se.Entity.Errors)
                        {
                            error += er.Message;
                        }
                    }
                    if (se.StoreValue != null)
                    {
                        foreach (var er in se.StoreValue.Errors)
                        {
                            error += er.Message;
                        }
                    }
                    Expect(error.Length == 0, String.Format("Concatenated Errors from StateEntities: {0}", error));
                }

                throw;
            }

            // check existance in entity set
            catElement = ctx.Categories.GetAllEntities().FirstOrDefault(p => object.ReferenceEquals(p, newCategory));
            Expect(catElement, Is.Null);
            suppElement = ctx.Suppliers.GetAllEntities().FirstOrDefault(p => object.ReferenceEquals(p, newSupplier));
            Expect(suppElement, Is.Null);
            prodElement = ctx.Products.GetAllEntities().FirstOrDefault(p => object.ReferenceEquals(p, newProduct));
            Expect(prodElement, Is.Null);
        }
コード例 #5
0
        public void T1_RevertReferenceCollection()
        {
            var ctx = Default.DataContext();

            // get data
            var customer = ctx.Customers
                           .AsQueryable()
                           .Include("CustomerDemographics")
                           .Single(c => c.CustomerID == CUSTOMER_ID);

            var customerGroup1 = ctx.DemographicGroups.AsQueryable().Single(g => g.CustomerTypeID == GROUP1_ID);
            var customerGroup2 = ctx.DemographicGroups.AsQueryable().Single(g => g.CustomerTypeID == GROUP2_ID);

            Expect(customer, Is.Not.Null);
            Expect(customerGroup1, Is.Not.Null);
            Expect(customerGroup2, Is.Not.Null);

            Expect(customer.CustomerDemographics, Is.Empty);
            Expect(customer.CustomerDemographics.Count, Is.EqualTo(0));

            Expect(customer.HasChanges, Is.False);
            Expect(customer.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(customerGroup1.HasChanges, Is.False);
            Expect(customerGroup2.HasChanges, Is.False);
            Expect(customerGroup1.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));
            Expect(customerGroup2.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // add one group
            customer.CustomerDemographics.Add(customerGroup1);

            Expect(customer.CustomerDemographics, Is.Not.Empty);
            Expect(customer.CustomerDemographics.Count, Is.EqualTo(1));

            Expect(customerGroup1.Customers, Is.Not.Empty);
            Expect(customerGroup1.Customers.Count, Is.EqualTo(1));

            Expect(customer.HasChanges, Is.True);
            Expect(customer.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(customerGroup1.HasChanges, Is.True);
            Expect(customerGroup1.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Assert.Contains(customerGroup1, customer.CustomerDemographics.ToArray());
            Assert.Contains(customer, customerGroup1.Customers.ToArray());


            // revert on customer
            customer.RevertChanges();

            Expect(customer.CustomerDemographics, Is.Empty);
            Expect(customer.CustomerDemographics.Count, Is.EqualTo(0));

            Expect(customerGroup1.Customers, Is.Empty);
            Expect(customerGroup1.Customers.Count, Is.EqualTo(0));


            // add two groups
            customer.CustomerDemographics.Add(customerGroup1);
            customer.CustomerDemographics.Add(customerGroup2);

            Expect(customer.CustomerDemographics, Is.Not.Empty);
            Expect(customer.CustomerDemographics.Count, Is.EqualTo(2));

            Expect(customerGroup1.Customers, Is.Not.Empty);
            Expect(customerGroup1.Customers.Count, Is.EqualTo(1));;

            Expect(customerGroup2.Customers, Is.Not.Empty);
            Expect(customerGroup2.Customers.Count, Is.EqualTo(1));

            Expect(customer.HasChanges, Is.True);
            Expect(customer.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(customerGroup1.HasChanges, Is.True);
            Expect(customerGroup1.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(customerGroup2.HasChanges, Is.True);
            Expect(customerGroup2.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Assert.Contains(customerGroup1, customer.CustomerDemographics.ToArray());
            Assert.Contains(customerGroup2, customer.CustomerDemographics.ToArray());
            Assert.Contains(customer, customerGroup1.Customers.ToArray());
            Assert.Contains(customer, customerGroup2.Customers.ToArray());


            // revert on one group
            customerGroup1.RevertChanges();

            Expect(customer.CustomerDemographics, Is.Not.Empty);
            Expect(customer.CustomerDemographics.Count, Is.EqualTo(1));

            Expect(customerGroup1.Customers, Is.Empty);
            Expect(customerGroup1.Customers.Count, Is.EqualTo(0));;

            Expect(customerGroup2.Customers, Is.Not.Empty);
            Expect(customerGroup2.Customers.Count, Is.EqualTo(1));

            Expect(customer.HasChanges, Is.True);
            Expect(customer.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(customerGroup1.HasChanges, Is.False);
            Expect(customerGroup1.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(customerGroup2.HasChanges, Is.True);
            Expect(customerGroup2.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Assert.Contains(customerGroup2, customer.CustomerDemographics.ToArray());
            Assert.Contains(customer, customerGroup2.Customers.ToArray());


            // accept changes on customer
            customer.AcceptChanges();

            Expect(customer.HasChanges, Is.False);
            Expect(customer.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(customerGroup1.HasChanges, Is.False);
            Expect(customerGroup1.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(customerGroup2.HasChanges, Is.True); // note: changes on customer group have not yet been accepted
            Expect(customerGroup2.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));


            // revert on group
            customerGroup2.RevertChanges();

            Expect(customer.HasChanges, Is.True); // note: since chage has been accepted, this revert is now a change
            Expect(customer.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(customerGroup1.HasChanges, Is.False);
            Expect(customerGroup1.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));

            Expect(customerGroup2.HasChanges, Is.False);
            Expect(customerGroup2.ChangeTracker.State, Is.EqualTo(ObjectState.Unchanged));
        }
コード例 #6
0
        public void T1_AddReferences()
        {
            var ctx = Default.DataContext();

            // create supplier
            var supplier1 = ctx.Suppliers.CreateNew();

            supplier1.AcceptChanges();


            // create products
            var product1 = ctx.Products.CreateNew();
            var product2 = ctx.Products.CreateNew();
            var product3 = ctx.Products.CreateNew();


            // set supplier reference (existing supplier)
            product1.Supplier = supplier1;

            Expect(product1.HasChanges, Is.True);  // product has changes
            Expect(supplier1.HasChanges, Is.True); // supplier has changes
            Expect(supplier1.Products.Count, Is.EqualTo(1));


            // begin edit of suplier
            var editableSuplier = supplier1 as IEditable;

            Expect(editableSuplier, Is.Not.Null);
            Expect(editableSuplier.CanEdit, Is.True);
            Expect(editableSuplier.CanCancelEdit, Is.False);
            Expect(editableSuplier.IsEditing, Is.False);

            editableSuplier.BeginEdit();

            Expect(editableSuplier.CanEdit, Is.True);
            Expect(editableSuplier.CanCancelEdit, Is.True);
            Expect(editableSuplier.IsEditing, Is.True);



            // set different supplier
            product2.Supplier = supplier1;
            Expect(product2.Supplier, Is.EqualTo(supplier1));
            Expect(supplier1.Products.Count, Is.EqualTo(2));


            // cancel edit of suplier
            editableSuplier.CancelEdit();
            Expect(product2.Supplier, Is.Null);
            Expect(supplier1.Products.Count, Is.EqualTo(1));



            // re-begin edit of suplier
            editableSuplier.BeginEdit();
            Expect(supplier1.HasChanges, Is.True); // supplier still has changes



            // set different supplier
            product3.Supplier = supplier1;
            Expect(product3.Supplier, Is.EqualTo(supplier1));
            Expect(supplier1.Products.Count, Is.EqualTo(2));



            // end edit of suplier
            editableSuplier.EndEdit();
            Expect(product3.Supplier, Is.EqualTo(supplier1));
            Expect(supplier1.Products.Count, Is.EqualTo(2));
        }