private void ImportAuthors(ILibrary libManager)
        {
            IDConversionDao idcDao           = new IDConversionDao();
            AuthorDao       authorDao        = new AuthorDao();
            var             anotherDbAuthors = authorDao.FindAll(_dataOpUnit.CurrentConnection, s_ANOTHER_DATABASE_ALIAS_NAME).ToList().ToViewModel();
            var             authors          = authorDao.FindAll(_dataOpUnit.CurrentConnection).ToList().ToViewModel();

            //同ID x 同値:対象ライブラリのエンティティをインポートしない。
            var alpha = from a in anotherDbAuthors
                        join oa in authors on a.ID equals oa.ID
                        where a.Name == oa.Name
                        select a;

            //同ID x 異値:対象ライブラリのエンティティを新規IDでインポートする。取込側ライブラリに新規IDと旧IDを記録する。
            var beta = from a in anotherDbAuthors.Except(alpha)
                       join oa in authors on a.ID equals oa.ID
                       where a.Name != oa.Name
                       select a;

            foreach (var add in beta)
            {
                var newGuid = Guid.NewGuid();
                idcDao.Insert(new Data.Entity.Migration.IDConversion("Author", newGuid, add.ID), _dataOpUnit.CurrentConnection);
                add.ID = newGuid;

                ImportAuthor(libManager, add);
            }

            //異ID x 同値:対象ライブラリのエンティティをインポートしない。取込側ライブラリに新規IDと旧IDを記録する。
            var gamma = from a in anotherDbAuthors.Except(alpha).Except(beta)
                        join oa in authors on a.Name equals oa.Name
                        where a.ID != oa.ID
                        select new { ForeignID = a.ID, DomesticID = oa.ID, Author = a };

            foreach (var add in gamma)
            {
                idcDao.Insert(new Data.Entity.Migration.IDConversion("Author", add.DomesticID, add.ForeignID), _dataOpUnit.CurrentConnection);
            }

            //異ID x 異値:対象ライブラリのエンティティを変更せずそのままインポートする。
            var delta = from a in anotherDbAuthors.Except(alpha).Except(beta).Except(gamma.Select(a => a.Author))
                        select a;

            foreach (var add in delta)
            {
                ImportAuthor(libManager, add);
            }
        }
        private void ImportTags(ILibrary libManager)
        {
            IDConversionDao idcDao        = new IDConversionDao();
            TagDao          tagDao        = new TagDao();
            var             anotherDbTags = tagDao.FindAll(_dataOpUnit.CurrentConnection, s_ANOTHER_DATABASE_ALIAS_NAME).ToViewModel();
            var             tags          = tagDao.FindAll(_dataOpUnit.CurrentConnection).ToViewModel();

            //同ID x 同値:対象ライブラリのエンティティをインポートしない。
            var alpha = from t in anotherDbTags
                        join ot in tags on t.ID equals ot.ID
                        where t.Name == ot.Name
                        select t;

            //同ID x 異値:対象ライブラリのエンティティを新規IDでインポートする。取込側ライブラリに新規IDと旧IDを記録する。
            var beta = from t in anotherDbTags.Except(alpha)
                       join ot in tags on t.ID equals ot.ID
                       where t.Name != ot.Name
                       select t;

            foreach (var add in beta)
            {
                var newGuid = Guid.NewGuid();
                idcDao.Insert(new Data.Entity.Migration.IDConversion("Tag", newGuid, add.ID), _dataOpUnit.CurrentConnection);
                add.ID = newGuid;

                ImportTag(libManager, add);
            }

            //異ID x 同値:対象ライブラリのエンティティをインポートしない。取込側ライブラリに新規IDと旧IDを記録する。
            var gamma = from t in anotherDbTags.Except(alpha).Except(beta)
                        join ot in tags on t.Name equals ot.Name
                        where t.ID != ot.ID
                        select new { ForeignID = t.ID, DomesticID = ot.ID, Tag = t };

            foreach (var add in gamma)
            {
                idcDao.Insert(new Data.Entity.Migration.IDConversion("Tag", add.DomesticID, add.ForeignID), _dataOpUnit.CurrentConnection);
            }

            //異ID x 異値:対象ライブラリのエンティティを変更せずそのままインポートする。
            var delta = from t in anotherDbTags.Except(alpha).Except(beta).Except(gamma.Select(t => t.Tag))
                        select t;

            foreach (var add in delta)
            {
                ImportTag(libManager, add);
            }
        }
        private IEnumerable <Task> GenerateTasksToImportBooks(ILibrary libManager)
        {
            List <Task> ret = new List <Task>();

            IDConversionDao idcDao         = new IDConversionDao();
            BookDao         bookDao        = new BookDao();
            var             anotherDbBooks = bookDao.FindAll(_dataOpUnit.CurrentConnection, s_ANOTHER_DATABASE_ALIAS_NAME).ToList().ToViewModel();
            var             books          = bookDao.FindAll(_dataOpUnit.CurrentConnection).ToList().ToViewModel();

            //同ID:対象ライブラリのエンティティを新規IDでインポートする。取込側ライブラリに新規IDと旧IDを記録する。
            var alpha = from b in anotherDbBooks
                        join ob in books on b.ID equals ob.ID
                        select b;

            foreach (var addBook in alpha)
            {
                var newGuid = Guid.NewGuid();
                idcDao.Insert(new Data.Entity.Migration.IDConversion("Book", newGuid, addBook.ID), _dataOpUnit.CurrentConnection);
                addBook.ID = newGuid;

                ret.AddRange(GenerateTasksToImportBook(libManager, addBook));
            }

            //異ID:対象ライブラリのエンティティを変更せずそのままインポートする。
            var beta = from b in anotherDbBooks.Except(alpha)
                       select b;

            foreach (var addBook in beta)
            {
                ret.AddRange(GenerateTasksToImportBook(libManager, addBook));
            }

            return(ret);
        }
        private void ImportBooks(ILibrary libManager)
        {
            IDConversionDao idcDao         = new IDConversionDao();
            BookDao         bookDao        = new BookDao();
            var             anotherDbBooks = bookDao.FindAll(_dataOpUnit.CurrentConnection, s_ANOTHER_DATABASE_ALIAS_NAME).ToList().ToViewModel();
            var             books          = bookDao.FindAll(_dataOpUnit.CurrentConnection).ToList().ToViewModel();

            //同ID:対象ライブラリのエンティティを新規IDでインポートする。取込側ライブラリに新規IDと旧IDを記録する。
            var alpha = from b in anotherDbBooks
                        join ob in books on b.ID equals ob.ID
                        select b;

            foreach (var add in alpha)
            {
                var newGuid = Guid.NewGuid();
                idcDao.Insert(new Data.Entity.Migration.IDConversion("Book", newGuid, add.ID), _dataOpUnit.CurrentConnection);
                add.ID = newGuid;

                ImportBookWithContents(libManager, add);
            }

            //異ID:対象ライブラリのエンティティを変更せずそのままインポートする。
            var beta = from b in anotherDbBooks.Except(alpha)
                       select b;

            foreach (var add in beta)
            {
                ImportBookWithContents(libManager, add);
            }
        }
        private void CopyPages(ILibrary libManager, BookViewModel parent)
        {
            IDConversionDao idcDao  = new IDConversionDao();
            PageDao         pageDao = new PageDao();

            var pages = pageDao.FindBy(new Dictionary <string, object>()
            {
                { "BookID", parent.ID }
            }, _dataOpUnit.CurrentConnection, s_ANOTHER_DATABASE_ALIAS_NAME).OrderBy(p => p.PageIndex).ToViewModel();

            foreach (var page in pages)
            {
                if (pageDao.FindBy(new Dictionary <string, object>()
                {
                    { "ID", page.ID }
                }, _dataOpUnit.CurrentConnection).Count() > 0)
                {
                    //対象ライブラリのエンティティを新規IDでインポートする。取込側ライブラリに新規IDと旧IDを記録する。
                    Guid newGuid = Guid.NewGuid();
                    idcDao.Insert(new Data.Entity.Migration.IDConversion("Page", newGuid, page.ID), _dataOpUnit.CurrentConnection);
                    page.ID = newGuid;

                    ImportPageWithContents(libManager, parent, page);
                }
                else
                {
                    //対象ライブラリのエンティティを変更せずそのままインポートする。
                    ImportPageWithContents(libManager, parent, page);
                }
            }
        }
        private void ImportImage(PageViewModel parent, ImageViewModel image)
        {
            IDConversionDao idcDao   = new IDConversionDao();
            ImageDao        imageDao = new ImageDao();

            if (imageDao.FindBy(new Dictionary <string, object>()
            {
                { "ID", parent.ImageID }
            }, _dataOpUnit.CurrentConnection).Count() > 0)
            {
                //対象ライブラリのエンティティを新規IDでインポートする。取込側ライブラリに新規IDと旧IDを記録する。
                Guid newGuid = Guid.NewGuid();
                idcDao.Insert(new Data.Entity.Migration.IDConversion("Image", newGuid, image.ID), _dataOpUnit.CurrentConnection);
                image.ID = newGuid;
            }

            CopyFile(image, parent.BookID);
            imageDao.Insert(image.ToEntity(), _dataOpUnit.CurrentConnection);
            parent.Image = image;
        }