/// <summary> /// Проверяем есть ли файл в Бд(если есть возвращаем его fileId, если нет то ноль) /// </summary> /// <param name="file"></param> /// <returns></returns> private int FindFileId(AttachedFileDTO file) { int fileId = 0; var ds = _environment.Execute(AttachedFileQueries.GetSelectQueryByNameAndSize(file.FileName, Convert.ToInt32(file.FileSize))); if (ds.Tables[0].Rows.Count > 0) { fileId = Convert.ToInt32(ds.Tables[0].Rows[0][0]); } return(fileId); }
public void SmartCoreFileTest_InsertLinksForAnotherFiles() { var dbManager = GetEnviroment(); var fileSmartCore = new FilesSmartCore(dbManager); //Константа =999 для того что бы в тестах было проще искать в бд линки для удаления данных перед вставкой const int linkTypeId = 999; const int directiveId1 = 7; const int directiveId2 = 8; int directiveTypeId1 = SmartCoreType.Directive.ItemId; //Создаем линк с новым файлом var link1 = CreateItemFileLink(directiveId1, directiveTypeId1, linkTypeId); var fileId1 = fileSmartCore.SaveAttachedFile(link1); //Создаем линк с новым файлом(таким же как и в 1 линке) и новым parentId var link2 = CreateItemFileLink(directiveId2, directiveTypeId1, linkTypeId); UpdateFileLink(link2); //Присваиваем другой файл для линка var fileId2 = fileSmartCore.SaveAttachedFile(link2); Assert.AreNotEqual(fileId1, fileId2, "Id файла не должны быть одинаковыми"); var dsLinks = dbManager.Execute(ItemFileLinksQueries.GetSelectQuery(new[] { link1.ItemId, link2.ItemId })); Assert.AreEqual(2, dsLinks.Tables[0].Rows.Count, "Должно быть 2 линка"); var getFirstLink = ItemFileLinksQueries.Fill(dsLinks.Tables[0].Rows[0]); var getSecondLink = ItemFileLinksQueries.Fill(dsLinks.Tables[0].Rows[1]); Assert.AreNotEqual(getFirstLink.File.ItemId, getSecondLink.File.ItemId, "Id на файлы должны отличаться"); Assert.AreEqual(fileId1, getFirstLink.File.ItemId, $"File Id первого линка должен быть равен {fileId1}"); Assert.AreEqual(fileId2, getSecondLink.File.ItemId, $"File Id второго линка должен быть равен {fileId2}"); Assert.AreEqual(linkTypeId, getFirstLink.LinkType, $"LinkType первого линка должен быть равен {linkTypeId}"); Assert.AreEqual(linkTypeId, getSecondLink.LinkType, $"LinkType второго линка должен быть равен {linkTypeId}"); Assert.AreEqual(directiveTypeId1, getFirstLink.ParentTypeId, $"ParentTypeId первого линка должен быть равен {directiveTypeId1}"); Assert.AreEqual(directiveTypeId1, getSecondLink.ParentTypeId, $"ParentTypeId второго линка должен быть равен {directiveTypeId1}"); Assert.AreEqual(directiveId1, getFirstLink.ParentId, $"ParentId первого линка должен быть равен {directiveId1}"); Assert.AreEqual(directiveId2, getSecondLink.ParentId, $"ParentId второго линка должен быть равен {directiveId2}"); var dsFiles1 = dbManager.Execute(AttachedFileQueries.GetSelectQueryByNameAndSize(link1.File.FileName, Convert.ToInt32(link1.File.FileSize))); var dsFiles2 = dbManager.Execute(AttachedFileQueries.GetSelectQueryByNameAndSize(link2.File.FileName, Convert.ToInt32(link2.File.FileSize))); Assert.AreEqual(1, dsFiles1.Tables[0].Rows.Count, $"Должен вернуть 1 файл {link1.File.FileName}"); Assert.AreEqual(1, dsFiles2.Tables[0].Rows.Count, $"Должен вернуть 1 файл {link2.File.FileName}"); fileSmartCore.DeleteAttachedFile(link1); fileSmartCore.DeleteAttachedFile(link2); dsLinks = dbManager.Execute(ItemFileLinksQueries.GetSelectQuery(new[] { link1.ItemId, link2.ItemId })); Assert.AreEqual(0, dsLinks.Tables[0].Rows.Count, "Должно быть 0 линков"); }
/// <summary> /// Проверяем есть ли линки на файл, если нет то удаляем файл из Бд /// </summary> /// <param name="fileId"></param> private void DeleteFileIfFileHasNoLinks(int fileId) { ICommonFilter idFilter = new CommonFilter <int>(ItemFileLink.FileIdProperty, fileId); var query = BaseQueries.GetSelectQueryColumnOnly <ItemFileLink>(BaseEntityObject.ItemIdProperty, new[] { idFilter }); var ds = _environment.Execute(query); var count = ds.Tables[0].Rows.Count; if (count == 0) { _environment.Execute(AttachedFileQueries.GetDeleteQuery(fileId)); } }
public void SmartCoreFileTest_InsertLinksAndRemoveFileLinkForLastFile() { var dbManager = GetEnviroment(); var fileSmartCore = new FilesSmartCore(dbManager); //Константа =999 для того что бы в тестах было проще искать в бд линки для удаления данных перед вставкой const int linkTypeId = 999; const int directiveId1 = 5; const int directiveId2 = 6; int directiveTypeId1 = SmartCoreType.Directive.ItemId; //Создаем линк с новым файлом var link1 = CreateItemFileLink(directiveId1, directiveTypeId1, linkTypeId); var fileId1 = fileSmartCore.SaveAttachedFile(link1); //Создаем линк с новым файлом(таким же как и в 1 линке) и новым parentId var link2 = CreateItemFileLink(directiveId2, directiveTypeId1, linkTypeId); var fileId2 = fileSmartCore.SaveAttachedFile(link2); Assert.AreEqual(fileId1, fileId2, "Id файла должны быть одинаковыми"); var dsLinks = dbManager.Execute(ItemFileLinksQueries.GetSelectQuery(new[] { link1.ItemId, link2.ItemId })); Assert.AreEqual(2, dsLinks.Tables[0].Rows.Count, "Должно быть 2 линка на 1 файл"); //Удаляем 2й линк fileSmartCore.DeleteAttachedFile(link2); var dsFiles = dbManager.Execute(AttachedFileQueries.GetSelectQueryByNameAndSize(link1.File.FileName, Convert.ToInt32(link1.File.FileSize))); Assert.AreEqual(1, dsFiles.Tables[0].Rows.Count, "Файла должно быть"); dsLinks = dbManager.Execute(ItemFileLinksQueries.GetSelectQuery(new[] { link1.ItemId, link2.ItemId })); Assert.AreEqual(1, dsLinks.Tables[0].Rows.Count, "Должно быть 1 линк"); fileSmartCore.DeleteAttachedFile(link1); dsLinks = dbManager.Execute(ItemFileLinksQueries.GetSelectQuery(new[] { link1.ItemId, link2.ItemId })); Assert.AreEqual(0, dsLinks.Tables[0].Rows.Count, "Должно быть 0 линков"); }
public int SaveAttachedFile(ItemFileLink link) { if (link == null) { throw new ArgumentNullException("ItemFileLink", "can not be null"); } var dsAfterInsertLink = new DataSet(); var existsFileId = FindFileId(link.File); if (existsFileId > 0) { //Присваиваем fileId файла, обновляем линк и возвращаем Id файла link.File.ItemId = existsFileId; dsAfterInsertLink = _environment.Execute(ItemFileLinksQueries.GetMergeQuery(), ItemFileLinksQueries.GetParameters(link)); link.ItemId = DbTypes.ToInt32(dsAfterInsertLink.Tables[0].Rows[0][0]); return(existsFileId); } //Запоминаем fileId старого файла var oldFileId = link.File.ItemId; var ds = _environment.Execute(AttachedFileQueries.GetInsertQuery(), AttachedFileQueries.GetParameters(link.File)); //Запоминаем fileId нового файла var newFileId = DbTypes.ToInt32(ds.Tables[0].Rows[0][0]); link.File.ItemId = newFileId; dsAfterInsertLink = _environment.Execute(ItemFileLinksQueries.GetMergeQuery(), ItemFileLinksQueries.GetParameters(link)); link.ItemId = DbTypes.ToInt32(dsAfterInsertLink.Tables[0].Rows[0][0]); if (oldFileId > 0) { DeleteFileIfFileHasNoLinks(oldFileId); } return(newFileId); }