public void Many2ManyDoAdd()
        {
            MajorWithOtherID m1 = new MajorWithOtherID
            {
                ID        = "id1",
                MajorCode = "111",
                MajorName = "major1",
                MajorType = MajorTypeEnum.Optional
            };
            MajorWithOtherID m2 = new MajorWithOtherID
            {
                ID        = "id2",
                MajorCode = "222",
                MajorName = "major2",
                MajorType = MajorTypeEnum.Required
            };
            Student s1 = new Student
            {
                LoginName = "s1",
                Password  = "******",
                Name      = "student1"
            };
            Student s2 = new Student
            {
                LoginName = "s2",
                Password  = "******",
                Name      = "student2"
            };

            _majorvm.Entity = m1;
            _majorvm.DoAdd();
            _majorvm.Entity = m2;
            _majorvm.DoAdd();

            s1.StudentMajorWithOtherID = new List <StudentMajorWithOtherID>();
            s1.StudentMajorWithOtherID.Add(new StudentMajorWithOtherID {
                MajorId = m1.ID
            });
            s2.StudentMajorWithOtherID = new List <StudentMajorWithOtherID>();
            s2.StudentMajorWithOtherID.Add(new StudentMajorWithOtherID {
                MajorId = m2.ID
            });
            _studentvm.Entity = s1;
            _studentvm.DoAdd();
            _studentvm.Entity = s2;
            _studentvm.DoAdd();

            using (var context = new DataContext(_seed, DBTypeEnum.Memory))
            {
                Assert.AreEqual(2, context.Set <MajorWithOtherID>().Count());
                Assert.AreEqual(2, context.Set <Student>().Count());
                Assert.AreEqual(2, context.Set <StudentMajorWithOtherID>().Count());
                var rv = context.Set <StudentMajorWithOtherID>().ToList();
                Assert.AreEqual(s1.ID, rv[0].StudentId);
                Assert.AreEqual(m1.ID, rv[0].MajorId);
                Assert.AreEqual(s2.ID, rv[1].StudentId);
                Assert.AreEqual(m2.ID, rv[1].MajorId);
            }
        }
        public void Many2ManyDoEditClearRelation()
        {
            MajorWithOtherID m1 = new MajorWithOtherID
            {
                ID        = "id1",
                MajorCode = "111",
                MajorName = "major1",
                MajorType = MajorTypeEnum.Optional
            };
            MajorWithOtherID m2 = new MajorWithOtherID
            {
                ID        = "id2",
                MajorCode = "222",
                MajorName = "major2",
                MajorType = MajorTypeEnum.Required
            };
            MajorWithOtherID m3 = new MajorWithOtherID
            {
                ID        = "id3",
                MajorCode = "333",
                MajorName = "major3",
                MajorType = MajorTypeEnum.Required
            };
            Student s1 = new Student
            {
                LoginName = "s1",
                Password  = "******",
                Name      = "student1"
            };

            _majorvm.Entity = m1;
            _majorvm.DoAdd();
            _majorvm.Entity = m2;
            _majorvm.DoAdd();
            _majorvm.Entity = m3;
            _majorvm.DoAdd();

            s1.StudentMajorWithOtherID = new List <StudentMajorWithOtherID>();
            s1.StudentMajorWithOtherID.Add(new StudentMajorWithOtherID {
                MajorId = m1.ID
            });
            s1.StudentMajorWithOtherID.Add(new StudentMajorWithOtherID {
                MajorId = m2.ID
            });
            s1.StudentMajorWithOtherID.Add(new StudentMajorWithOtherID {
                MajorId = m3.ID
            });
            _studentvm.Entity = s1;
            _studentvm.DoAdd();

            using (var context = new DataContext(_seed, DBTypeEnum.Memory))
            {
                s1.StudentMajor   = null;
                _studentvm.DC     = context;
                _studentvm.Entity = s1;
                _studentvm.DoEdit();
            }

            using (var context = new DataContext(_seed, DBTypeEnum.Memory))
            {
                Assert.AreEqual(3, context.Set <StudentMajorWithOtherID>().Count());
            }

            using (var context = new DataContext(_seed, DBTypeEnum.Memory))
            {
                s1.StudentMajorWithOtherID = new List <StudentMajorWithOtherID>();
                _studentvm.DC     = context;
                _studentvm.Entity = s1;
                _studentvm.FC     = new Dictionary <string, object>();
                _studentvm.FC.Add("Entity.StudentMajorWithOtherID", null);
                _studentvm.DoEdit();
            }
            using (var context = new DataContext(_seed, DBTypeEnum.Memory))
            {
                Assert.AreEqual(0, context.Set <StudentMajorWithOtherID>().Count());
            }
        }
        public void Many2ManyDoEdit()
        {
            MajorWithOtherID m1 = new MajorWithOtherID
            {
                ID        = "id1",
                MajorCode = "111",
                MajorName = "major1",
                MajorType = MajorTypeEnum.Optional
            };
            MajorWithOtherID m2 = new MajorWithOtherID
            {
                ID        = "id2",
                MajorCode = "222",
                MajorName = "major2",
                MajorType = MajorTypeEnum.Required
            };
            MajorWithOtherID m3 = new MajorWithOtherID
            {
                ID        = "id3",
                MajorCode = "333",
                MajorName = "major3",
                MajorType = MajorTypeEnum.Required
            };
            Student s1 = new Student
            {
                LoginName = "s1",
                Password  = "******",
                Name      = "student1"
            };

            _majorvm.Entity = m1;
            _majorvm.DoAdd();
            _majorvm.Entity = m2;
            _majorvm.DoAdd();
            _majorvm.Entity = m3;
            _majorvm.DoAdd();

            s1.StudentMajorWithOtherID = new List <StudentMajorWithOtherID>();
            s1.StudentMajorWithOtherID.Add(new StudentMajorWithOtherID {
                MajorId = m1.ID
            });
            s1.StudentMajorWithOtherID.Add(new StudentMajorWithOtherID {
                MajorId = m2.ID
            });
            _studentvm.Entity = s1;
            _studentvm.DoAdd();

            using (var context = new DataContext(_seed, DBTypeEnum.Memory))
            {
                s1.StudentMajorWithOtherID.RemoveAt(0);
                s1.StudentMajorWithOtherID.Add(new StudentMajorWithOtherID {
                    MajorId = m3.ID
                });
                _studentvm.DC     = context;
                _studentvm.Entity = s1;
                _studentvm.DoEdit();
            }

            using (var context = new DataContext(_seed, DBTypeEnum.Memory))
            {
                Assert.AreEqual(3, context.Set <MajorWithOtherID>().Count());
                Assert.AreEqual(1, context.Set <Student>().Count());
                Assert.AreEqual(2, context.Set <StudentMajorWithOtherID>().Count());
                var rv1 = context.Set <StudentMajorWithOtherID>().Where(x => x.MajorId == m2.ID).SingleOrDefault();
                var rv2 = context.Set <StudentMajorWithOtherID>().Where(x => x.MajorId == m3.ID).SingleOrDefault();
                Assert.AreEqual(s1.ID, rv1.StudentId);
                Assert.AreEqual(m2.ID, rv1.MajorId);
                Assert.AreEqual(s1.ID, rv2.StudentId);
                Assert.AreEqual(m3.ID, rv2.MajorId);
            }
        }