Asp net удалить файл
Как я могу удалить файл?
В документации никогда не говорится, что IFileProvder используется для управления файлами, не говоря уже о том, что он лучше, чем классы System.IO, которые уже абстрагируют файловую систему. Они говорят, что IFileProvider используется для прерывания доступа и предоставления информации о файлах, каталогах и уведомлениях об изменениях.
Какие файлы вы хотите удалить? Почему бы не использовать как всегда File.Delete или FileInfo.Delete ? Классы System.IO не зависят от NTFS, они в конечном итоге используют API файловой системы каждой операционной системы. Возможно, вас беспокоит разница в пути в Linux и Windows?
@PanagiotisKanavos, как вы упомянули, меня беспокоит другой путь в ОС, такой как Linux, Windows и .
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно.
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей.
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то.
Ответы 1
В комментариях вы высказали предположение, что вас беспокоит другая форма пути в разных операционных системах, в которых может работать ваш код. Пока вы не пытаетесь объединить части string.Concat или + своих путей вместе, построить их в StringBuilder или каким-либо иным образом попытаться сделать вид, что вы сможете построить действительный путь самостоятельно в любых обстоятельствах. будь умницей :). Классы, относящиеся к файловой системе, в пространстве имен System.IO существуют специально, чтобы помочь вам сделать это правильно, поэтому используйте их.
Если у вас уже есть экземпляр IFileProvider откуда-то еще (скажем, что вы используете, чтобы перечислить файлы в отображать для пользователей, чтобы они могли выбрать, какие из них удалить), вы можете смешать и сопоставить это с System.IO , возможно, примерно так:
Нет абсолютно никакой проверки ошибок, валидации, обработки исключений или чего-либо еще, что могло бы удаленно сделать этот производственный код здесь. (с исключением возможный фактической проверки того, что запись в каталоге не является каталогом!), Поэтому, пожалуйста, не используйте его как есть.
На равных: Если у вас нет экземпляра IFileSystem ниоткуда, не чувствуйте себя обязанным создавать его только для удаления файлов!
Другие вопросы по теме
System.DllNotFoundException: 'Невозможно загрузить DLL' libwkhtmltox ': указанный модуль не найден. (Исключение из HRESULT: 0x8007007E) '
- How to create a text file and write data to it.
- How to append data to an existing file.
- How to read a file and display from it.
- How to delete files from a website.
- How to let users upload one file or multiple files.
- The File object, which provides a way to manage files.
- The FileUpload helper.
- The Path object, which provides methods that let you manipulate path and file names.
Software versions used in the tutorial
Creating a Text File and Writing Data to It
In addition to using a database in your website, you might work with files. For example, you might use text files as a simple way to store data for the site. (A text file that's used to store data is sometimes called a flat file.) Text files can be in different formats, like .txt, .xml, or .csv (comma-delimited values).
If you want to store data in a text file, you can use the File.WriteAllText method to specify the file to create and the data to write to it. In this procedure, you'll create a page that contains a simple form with three input elements (first name, last name, and email address) and a Submit button. When the user submits the form, you'll store the user's input in a text file.
Create a new folder named App_Data, if it doesn't exist already.
At the root of your website, create a new file named UserData.cshtml.
Replace the existing content with the following:
The HTML markup creates the form with the three text boxes. In the code, you use the IsPost property to determine whether the page has been submitted before you start processing.
The first task is to get the user input and assign it to variables. The code then concatenates the values of the separate variables into one comma-delimited string, which is then stored in a different variable. Notice that the comma separator is a string contained in quotation marks (","), because you're literally embedding a comma into the big string that you're creating. At the end of the data that you concatenate together, you add Environment.NewLine . This adds a line break (a newline character). What you're creating with all this concatenation is a string that looks like this:
(With an invisible line break at the end.)
You then create a variable ( dataFile ) that contains the location and name of the file to store the data in. Setting the location requires some special handling. In websites, it's a bad practice to refer in code to absolute paths like C:\Folder\File.txt for files on the web server. If a website is moved, an absolute path will be wrong. Moreover, for a hosted site (as opposed to on your own computer) you typically don't even know what the correct path is when you're writing the code.
In order for your code to save files in the App_Data folder, the application needs read-write permissions for that folder. On your development computer this is not typically an issue. However, when you publish your site to a hosting provider's web server, you might need to explicitly set those permissions. If you run this code on a hosting provider's server and get errors, check with the hosting provider to find out how to set those permissions.
Run the page in a browser.
Enter values into the fields and then click Submit.
Close the browser.
Return to the project and refresh the view.
Open the data.txt file. The data you submitted in the form is in the file.
Close the data.txt file.
Appending Data to an Existing File
In the previous example, you used WriteAllText to create a text file that's got just one piece of data in it. If you call the method again and pass it the same file name, the existing file is completely overwritten. However, after you've created a file you often want to add new data to the end of the file. You can do that using the AppendAllText method of the File object.
In the website, make a copy of the UserData.cshtml file and name the copy UserDataMultiple.cshtml.
Replace the code block before the opening tag with the following code block:
This code has one change in it from the previous example. Instead of using WriteAllText , it uses the AppendAllText method. The methods are similar, except that AppendAllText adds the data to the end of the file. As with WriteAllText , AppendAllText creates the file if it doesn't already exist.
Run the page in a browser.
Enter values for the fields and then click Submit.
Add more data and submit the form again.
Return to your project, right-click the project folder, and then click Refresh.
Open the data.txt file. It now contains the new data that you just entered.
Reading and Displaying Data from a File
Even if you don't need to write data to a text file, you'll probably sometimes need to read data from one. To do this, you can again use the File object. You can use the File object to read each line individually (separated by line breaks) or to read individual item no matter how they're separated.
This procedure shows you how to read and display the data that you created in the previous example.
At the root of your website, create a new file named DisplayData.cshtml.
Replace the existing content with the following:
The code starts by reading the file that you created in the previous example into a variable named userData , using this method call:
The code to do this is inside an if statement. When you want to read a file, it's a good idea to use the File.Exists method to determine first whether the file is available. The code also checks whether the file is empty.
-
list and displays one list item for each field in the data line.
Run the page in a browser. The data you entered for the previous examples is displayed.
Displaying Data from a Microsoft Excel Comma-Delimited File
You can use Microsoft Excel to save the data contained in a spreadsheet as a comma-delimited file (.csv file). When you do, the file is saved in plain text, not in Excel format. Each row in the spreadsheet is separated by a line break in the text file, and each data item is separated by a comma. You can use the code shown in the previous example to read an Excel comma-delimited file just by changing the name of the data file in your code.
Deleting Files
To delete files from your website, you can use the File.Delete method. This procedure shows how to let users delete an image (.jpg file) from an images folder if they know the name of the file.
In the website, create a subfolder named images.
Copy one or more .jpg files into the images folder.
In the root of the website, create a new file named FileDelete.cshtml.
Replace the existing content with the following:
This page contains a form where users can enter the name of an image file. They don't enter the .jpg file-name extension; by restricting the file name like this, you help prevents users from deleting arbitrary files on your site.
The code reads the file name that the user has entered and then constructs a complete path. To create the path, the code uses the current website path (as returned by the Server.MapPath method), the images folder name, the name that the user has provided, and ".jpg" as a literal string.
To delete the file, the code calls the File.Delete method, passing it the full path that you just constructed. At the end of the markup, code displays a confirmation message that the file was deleted.
Run the page in a browser.
Enter the name of the file to delete and then click Submit. If the file was deleted, the name of the file is displayed at the bottom of the page.
Letting Users Upload a File
The FileUpload helper lets users upload files to your website. The procedure below shows you how to let users upload a single file.
In the App_Data folder, create a new a folder and name it UploadedFiles.
In the root, create a new file named FileUpload.cshtml.
Replace the existing content in the page with the following:
The body portion of the page uses the FileUpload helper to create the upload box and buttons that you're probably familiar with:
The properties that you set for the FileUpload helper specify that you want a single box for the file to upload and that you want the submit button to read Upload. (You'll add more boxes later in the article.)
When the user clicks Upload, the code at the top of the page gets the file and saves it. The Request object that you normally use to get values from form fields also has a Files array that contains the file (or files) that have been uploaded. You can get individual files out of specific positions in the array — for example, to get the first uploaded file, you get Request.Files[0] , to get the second file, you get Request.Files[1] , and so on. (Remember that in programming, counting usually starts at zero.)
When you fetch an uploaded file, you put it in a variable (here, uploadedFile ) so that you can manipulate it. To determine the name of the uploaded file, you just get its FileName property. However, when the user uploads a file, FileName contains the user's original name, which includes the entire path. It might look like this:
You don't want all that path information, though, because that's the path on the user's computer, not for your server. You just want the actual file name (Sample.txt). You can strip out just the file from a path by using the Path.GetFileName method, like this:
The Path object is a utility that has a number of methods like this that you can use to strip paths, combine paths, and so on.
Once you've gotten the name of the uploaded file, you can build a new path for where you want to store the uploaded file in your website. In this case, you combine Server.MapPath , the folder names (App_Data/UploadedFiles), and the newly stripped file name to create a new path. You can then call the uploaded file's SaveAs method to actually save the file.
Run the page in a browser.
Click Browse and then select a file to upload.
The text box next to the Browse button will contain the path and file location.
Click Upload.
In the website, right-click the project folder and then click Refresh.
Open the UploadedFiles folder. The file that you uploaded is in the folder.
Letting Users Upload Multiple Files
Create a new page named FileUploadMultiple.cshtml.
Replace the existing content in the page with the following:
In this example, the FileUpload helper in the body of the page is configured to let users upload two files by default. Because allowMoreFilesToBeAdded is set to true , the helper renders a link that lets user add more upload boxes:
To process the files that the user uploads, the code uses the same basic technique that you used in the previous example — get a file from Request.Files and then save it. (Including the various things you need to do to get the right file name and path.) The innovation this time is that the user might be uploading multiple files and you don't know many. To find out, you can get Request.Files.Count .
With this number in hand, you can loop through Request.Files , fetch each file in turn, and save it. When you want to loop a known number of times through a collection, you can use a for loop, like this:
The uploadedCount variable totals all the files that are successfully uploaded and saved. This code accounts for the possibility that an expected file may not be able to be uploaded.
Run the page in a browser. The browser displays the page and its two upload boxes.
Select two files to upload.
Click Add another file. The page displays a new upload box.
Click Upload.
In the website, right-click the project folder and then click Refresh.
Open the UploadedFiles folder to see the successfully uploaded files.
- Создание текстового файла и запись данных в него.
- Добавление данных в существующий файл.
- Как считывать файл и отображать его.
- Удаление файлов с веб-сайта.
- Как разрешить пользователям отправлять один или несколько файлов.
- Объект File , предоставляющий способ управления файлами.
- Помощник FileUpload .
- Объект Path , предоставляющий методы, позволяющие управлять именами путей и файлов.
Версии программного обеспечения, используемые в руководстве
Создание текстового файла и запись данных в него
Помимо использования базы данных на веб-сайте, вы можете работать с файлами. Например, текстовые файлы можно использовать в качестве простого способа хранения данных для сайта. (Текстовый файл, используемый для хранения данных, иногда называется неструктурированным.) Текстовые файлы могут быть в разных форматах, таких как .txt, .xmlили .csv (значения с разделителями-запятыми).
Создайте новую папку с именем App_Data, если она еще не существует.
В корне веб-сайта создайте файл с именем UserData.cshtml.
Замените существующее содержимое следующим:
Разметка HTML создает форму с тремя текстовыми полями. В коде используется IsPost свойство, чтобы определить, была ли отправлена страница перед началом обработки.
Первая задача — получить введенные пользователем данные и назначить его переменным. Затем код объединяет значения отдельных переменных в одну строку с разделителями-запятыми, которая затем хранится в другой переменной. Обратите внимание, что разделитель запятых — это строка, содержащаяся в кавычках (","), так как вы буквально внедряете запятую в большую строку, которую вы создаете. В конце сцепляемых данных добавьте Environment.NewLine . При этом добавляется разрыв строки (символ новой строки). То, что вы создаете с помощью всего этого объединения, — это строка, которая выглядит следующим образом:
(С невидимым разрывом строки в конце.)
Затем создается переменная ( dataFile ), содержащая расположение и имя файла для хранения данных. Для задания расположения требуется специальная обработка. На веб-сайтах не рекомендуется ссылаться на код на абсолютные пути, такие как C:\Folder\File.txt для файлов на веб-сервере. Если веб-сайт перемещен, абсолютный путь будет неправильным. Кроме того, для размещенного сайта (в отличие от собственного компьютера) обычно вы даже не знаете, какой путь является правильным при написании кода.
Чтобы код сохранял файлы в папке App_Data , приложению требуются разрешения на чтение и запись для этой папки. На компьютере разработки эта проблема обычно не является проблемой. Однако при публикации сайта на веб-сервере поставщика услуг размещения может потребоваться явно задать эти разрешения. Если вы запускаете этот код на сервере поставщика услуг размещения и получаете ошибки, обратитесь к поставщику услуг размещения, чтобы узнать, как задать эти разрешения.
Запустите страницу в браузере.
Вернитесь в проект и обновите представление.
Откройте файлdata.txt . Данные, отправленные в форме, отображаются в файле.
Закройте файл data.txt .
Добавление данных в существующий файл
В предыдущем примере вы использовали для WriteAllText создания текстового файла, в который есть только один фрагмент данных. Если вызвать метод еще раз и передать ему то же имя файла, существующий файл полностью перезаписывается. Однако после создания файла часто требуется добавить новые данные в конец файла. Это можно сделать с помощью AppendAllText метода File объекта.
На веб-сайте создайте копию файла UserData.cshtml и присвойте ей имя userDataMultiple.cshtml.
Замените блок кода перед открывающим тегом следующим блоком кода:
Этот код имеет одно изменение из предыдущего примера. Вместо использования WriteAllText он использует the AppendAllText метод. Эти методы аналогичны, за исключением того, что AppendAllText данные добавляются в конец файла. Как и в случае, WriteAllText создает файл, AppendAllText если он еще не существует.
Запустите страницу в браузере.
Добавьте дополнительные данные и отправьте форму еще раз.
Вернитесь в проект, щелкните правой кнопкой мыши папку проекта и выберите команду "Обновить".
Откройте файлdata.txt . Теперь он содержит новые данные, которые вы только что ввели.
Чтение и отображение данных из файла
Даже если вам не нужно записывать данные в текстовый файл, иногда потребуется считывать данные из одного. Для этого снова можно использовать File объект. Объект можно использовать для чтения каждой File строки по отдельности (разделенных разрывами строк) или для чтения отдельных элементов независимо от того, как они разделены.
В этой процедуре показано, как считывать и отображать данные, созданные в предыдущем примере.
В корне веб-сайта создайте файл с именем DisplayData.cshtml.
Замените существующее содержимое следующим:
Код начинается с считывания файла, созданного в предыдущем примере, в переменную с именем userData , с помощью этого вызова метода:
Код для этого находится внутри if оператора. Если вы хотите прочитать файл, рекомендуется использовать File.Exists этот метод, чтобы сначала определить, доступен ли файл. Код также проверяет, является ли файл пустым.
-
цикл также создает список и отображает один элемент списка для каждого поля в строке данных.
В коде показано, как использовать два типа данных, массив и char тип данных. Массив является обязательным, так как File.ReadAllLines метод возвращает данные в виде массива. Тип char данных является обязательным, так как Split метод возвращает тип array , в котором каждый элемент имеет тип char . (Дополнительные сведения о массивах см. в разделе "Введение в веб-программирование ASP.NET с помощью синтаксиса Razor".)
Запустите страницу в браузере. Отображаются данные, введенные для предыдущих примеров.
Отображение данных из файла Microsoft Excel Comma-Delimited
Вы можете использовать Microsoft Excel для сохранения данных, содержащихся в электронной таблице, в виде файла с разделителями-запятыми (.csv файла). При этом файл сохраняется в виде обычного текста, а не в формате Excel. Каждая строка в электронной таблице отделена разрывом строки в текстовом файле, и каждый элемент данных отделяется запятой. Код, показанный в предыдущем примере, можно использовать для чтения Excel файла с разделителями-запятыми, просто изменив имя файла данных в коде.
Удаление файлов
Чтобы удалить файлы с веб-сайта, можно использовать File.Delete этот метод. В этой процедуре показано, как разрешить пользователям удалять изображение (.jpg-файл ) из папки изображений , если они знают имя файла.
Важно На рабочем веб-сайте обычно можно ограничить пользователей, которым разрешено вносить изменения в данные. Сведения о настройке членства и способах авторизации пользователей для выполнения задач на сайте см. в статье "Добавление безопасности и членства на сайт веб-страницы ASP.NET".
На веб-сайте создайте вложенную папку с именами изображений.
Скопируйте один или несколько .jpg файлов в папку изображений .
В корне веб-сайта создайте файл с именем FileDelete.cshtml.
Замените существующее содержимое следующим кодом:
Эта страница содержит форму, в которой пользователи могут ввести имя файла изображения. Они не вводят расширение имени файла .jpg ; ограничивая имя файла таким образом, вы помогаете запретить пользователям удалять произвольные файлы на сайте.
Код считывает имя файла, введенное пользователем, а затем создает полный путь. Чтобы создать путь, код использует текущий путь веб-сайта (как возвращается методом Server.MapPath ), имя папки изображений , указанное пользователем, и ".jpg" в качестве литеральной строки.
Запустите страницу в браузере.
Предоставление пользователям Upload файла
Вспомогатель FileUpload позволяет пользователям отправлять файлы на веб-сайт. В приведенной ниже процедуре показано, как разрешить пользователям отправлять один файл.
В папке App_Data создайте папку и назовите ее UploadedFiles.
В корневом каталоге создайте файл с именем FileUpload.cshtml.
Замените существующее содержимое на странице следующим кодом:
Часть текста страницы использует FileUpload вспомогатель для создания поля отправки и кнопок, с которыми вы, вероятно, знакомы:
Свойства, заданные для вспомогательного FileUpload элемента, указывают, что требуется одно поле для отправки файла, и что кнопка отправки будет считывать Upload. (Вы добавите дополнительные поля далее в статье.)
Когда пользователь щелкает Upload, код в верхней части страницы получает файл и сохраняет его. Объект Request , который обычно используется для получения значений из полей формы, также содержит Files массив, содержащий отправленный файл (или файлы). Вы можете получить отдельные файлы из определенных позиций в массиве, например, чтобы получить первый отправленный файл, Request.Files[0] получить второй файл, получить Request.Files[1] и т. д. (Помните, что при программировании подсчет обычно начинается с нуля.)
При получении отправленного файла вы поместите его в переменную (здесь), uploadedFile чтобы управлять ею. Чтобы определить имя отправленного файла, вы просто получите его FileName свойство. Однако, когда пользователь отправляет файл, FileName содержит исходное имя пользователя, которое включает весь путь. Он может выглядеть так: .
Однако вам не нужны все сведения о пути, так как это путь на компьютере пользователя, а не для сервера. Вам просто нужно фактическое имя файла (Sample.txt). Вы можете удалить только файл из пути с помощью Path.GetFileName метода, как показано ниже.
Объект Path — это служебная программа, которая имеет ряд таких методов, которые можно использовать для чередовки путей, объединения путей и т. д.
Получив имя отправленного файла, вы можете создать новый путь для хранения отправленного файла на веб-сайте. В этом случае вы объединяете Server.MapPath имена папок (App_Data/UploadedFiles) и только что чередуемое имя файла для создания нового пути. Затем можно вызвать метод отправленного файла SaveAs , чтобы фактически сохранить файл.
Запустите страницу в браузере.
Текстовое поле рядом с кнопкой "Обзор" будет содержать путь и расположение файла.
На веб-сайте щелкните правой кнопкой мыши папку проекта и выберите команду "Обновить".
Откройте папку UploadedFiles . Отправленный файл находится в папке.
Предоставление пользователям Upload нескольких файлов
Создайте страницу с именем FileUploadMultiple.cshtml.
Замените существующее содержимое на странице следующим кодом:
В этом примере помощник в тексте страницы настроен так, FileUpload чтобы пользователи отправили два файла по умолчанию. Так как allowMoreFilesToBeAdded задано значение true , вспомогатель отображает ссылку, которая позволяет пользователю добавлять дополнительные поля отправки:
Чтобы обработать файлы, отправляемые пользователем, код использует тот же базовый метод, который использовался в предыдущем примере, — получите файл и Request.Files сохраните его. (Включая различные действия, которые необходимо выполнить, чтобы получить правильное имя файла и путь.) Инновации на этот раз заключается в том, что пользователь может отправлять несколько файлов, и вы не знаете много. Чтобы узнать, вы можете получить Request.Files.Count .
С помощью этого числа можно выполнить цикл, Request.Files получить каждый файл в свою очередь и сохранить его. Если вы хотите циклировать известное количество раз в коллекции, можно использовать for цикл, как показано ниже.
Переменная uploadedCount суммирует все файлы, которые успешно отправлены и сохранены. Этот код учитывает возможность отправки ожидаемого файла.
Запустите страницу в браузере. В браузере отображается страница и два поля отправки.
Выберите два файла для отправки.
На веб-сайте щелкните правой кнопкой мыши папку проекта и выберите команду "Обновить".
Откройте папку UploadedFiles , чтобы просмотреть успешно отправленные файлы.
Цель урока: Изучить основные принципы работы с базой данных. Краткое описание реляционной модели баз данных. Работа с базой данных (создание таблиц, связей в VS 2012). Команды INSERT, UPDATE, DELETE, SELECT. Использование LinqToSql и Linq. Создание репозитария, IRepository, SqlRepository.
Что такое БД
Реляционная база данных — база данных, основанная на реляционной модели данных. Реляционность – это отношения (связи) от англ. relation.
Таблицы
- у таблицы есть имя (уникальное)
- нет двух одинаковых строк
- столбцы имеют разные наименования (нет двух одинаковых столбцов)
- порядок строк в таблице произвольный (т.е. не надо учитывать порядок строк, если не задана сортировка)
- Имя столбца
- Тип данных для этого столбца
Связи
- Первичный ключ – это набор столбцов (атрибутов) таблицы, однозначно определяющих уникальность строки. Обычно это одно поле, называется ID. Оно является автоикрементным, т.е. при попытке добавления записи, там автоматически вставляется 1, 2, 3, 4… n+1, где n – это значение последнего добавленного ID.
- Внешний ключ – это набор столбцов (атрибутов) таблицы, которые однозначно определяют уникальность строки в другой таблице. Опять же это обычно одно поле, названное [Имя таблицы]ID. Но не является автоинкрементным.
- Прописана связь между первичным ключом и внешним ключом.
- Один-к-одному. Т.е. одной строке в таблице соответствует одна строка в другой таблице. Это редко используется, но используется. Например, в одной таблице данные о пользователе, а в другой — дополнительные данные о том же пользователе. Такой вариант необходим, чтобы манипулировать, по необходимости, меньшим количеством данных.
- Один-ко-многим. Одной строк в таблице A соответствует одна или несколько строк в таблице B. Но одной строке в таблице B соответствует только одна строка в таблице A. В этом случае в таблице B существует внешний ключ, который однозначно определяет запись в таблице A.
- Многие-ко-многим. Одной строке в таблице А соответствует одна или несколько строк в таблице В, что истинно и в обратном. В данном случае создается дополнительная таблица со своим первичным ключом, и двумя внешними ключами к таблице A и B.
Создание простой схемы в БД
Создадим БД в VS 2012:
Назовем её LessonProject, и добавим 3 таблицы Role User и UserRole.
Создадим таблицу Role:
Для строковых значений используем тип nvarchar(n), где n – максимальная длина строки, обычно используется от 50 до 500. Для больших текстовых строк используется nvarchar(MAX).
Устанавливаем первичный ключ:
Задаем для ID автоинкремент:
Подобным образом создаем таблицу User:
Поле | Тип поля |
ID | int |
nvarchar(150) | |
Password | nvarchar(50) |
AddedDate | datetime |
ActivatedDate | datetime (null) |
ActivatedLink | nvarchar(50) |
LastVisitDate | datetime (null) |
AvatarPath | nvarchar(150) (null) |
Создаем таблицу UserRole:
Поле | Тип поля |
ID | int |
UserID | int |
RoleID | int |
Добавляем новую связь, нажав Add. Добавление связей происходит в таблице, где находятся внешние ключи. Раскрываем вкладку Tables and Columns и выставляем таблицу с первичным ключом, и выбираем внешний ключ в текущей таблице UserRole.
В свойствах INSERT And UPDATE Specification выставляем On Update/On Delete свойства Cascade:
Это необходимо для того, чтобы при изменении/удалении столбца из таблицы Role все связанные с этой строкой строки таблицы UserRole должны быть изменены или удалены.
Аналогичную связь мы устанавливаем с таблицей User.
Таким образом, таблицы Role и User имеют отношения многие ко многим через таблицу UserRole. Т.е. у одного пользователя может быть больше одной роли, и одна и та же роль может быть у нескольких пользователей.
SELECT, INSERT, UPDATE, DELETE.
В реляционных базах данных используется язык запросов SQL.
Есть 4 основные команды для манипулирования данными — SELECT, INSERT, UPDATE, DELETE
SELECT – для выбора данных и таблиц.
Пример:
INSERT — Добавление строк в таблицу
Пример:
UPDATE – изменение значений в таблице
Пример:
DELETE – удаление строк из таблицы
Пример:
LinqToSQL и Linq.
Создадим проект LessonProject.Model для работы с БД типа ClassLibrary.
Добавляем LINQ to SQL Classes тип, называем LessonProejctDb.dbml
Открываем объект, выделяем все таблицы и мышкой переносим на холст:
- классы, готовые к использованию в работе с БД
- визуальное отображение таблиц и связей
Добавим несколько данных в таблицу Role и User:
1 | admin | Админ |
2 | customer | Заказчик |
ID | UserID | RoleID |
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 2 |
Создадим консольный проект Lesson3 и подключим LessonProject.Model. Добавим сборку System.Configuration и System.Data.Linq. Проинициализируем context и выведем данные о ролях:
Для добавления строки в Role делаем так:
Для удаления строки в Role делаем так:
Для изменения данных делаем так:
Для манипуляции данных используется язык запросов Linq. Мы рассмотрим только некоторые основные функции Linq. Linq применяется для типов реализующий интерфейс IQueryable<>
-
.Where() – основная функция фильтрации. Возвращает тип IQueryable. Условие внутри должно возвращать булево значение (bool).
Создание репозитория IRepository, SqlRepository.
Собственно с БД мы уже можем работать, только теперь нужно отделить модель данных от конкретной реализации, т.е. наши контроллеры про context и System.Data.Linq вообще не должны ничего знать.
Для этого создадим интерфейс IRepository, где будет дан доступ к данным, а также выведены методы для создания, изменения и удаления этих данных.
Реализацию назовем SqlRepository. Так как мы с данным контекстом SqlRepository не хотим особо связывать, то добавим Ninject модуль в проект LessonProject.Model:
Создадим класс SqlRepository:
Прежде, чем реализовать доступ ко всем таблицам, создание, удаление и изменение, подумаем о том, что файл этот будет выглядеть громадным и неуклюжим. Таким кодом будет управлять тяжело физически. Так что сделаем отдельную папку SqlRepository и SqlRepository класс сделаем partial, а в папке создадим реализации интерфейса IRepository, разбитые по каждой таблице. Назовем файл Role:
Небольшой проект содержит от 10 до 40 таблиц, большой проект от 40, и всё это хотелось бы как-то автоматизировать. Создадим несколько сниппетов, для IRepository и для SqlRepository. Сниппеты – это уже готовые шаблоны кода, которые вызываются с помощью intelliSence, и позволяют быстро создавать код.
Сниппеты
Для IRepository таблиц, создадим table.snippet:
Для SqlRepository создадим сниппет sqlTable.snippet:
Для того, чтобы добавить code-snippet. откроем TOOLS -> Code Snippet Manager… (Ctrl-K, B). В окне нажимаем Import и импортируем оба сниппета в My Code snippet:
Finish, OK.
Используем для таблиц User и UserRole.
Осталось прописать только поля для Update [имя таблицы], но это уже меньше работы.
Proxy
Как видим, классы, которые мы используем, являются partial, поэтому их можно дополнить. Создадим, подобно SqlRepository, папку Proxy, где будем размещать partial классы. Например, для класса User создадим метод, который автоматически генерирует строку, требуемую для активации пользователя:
Добавим строку доступа к БД в web.Config:
Проинициализируем работу с БД в Ninject:
Применяем InRequestScope(). Т.е. каждый запрос будет использовать отдельный объект SqlRepository. Это позволит избежать коллизий при исполнении.Объявляем IRepository в контроллере:
Как я могу удалить файл?
В документации никогда не говорится, что IFileProvder используется для управления файлами, не говоря уже о том, что он лучше, чем классы System.IO, которые уже абстрагируют файловую систему. Они говорят, что IFileProvider используется для прерывания доступа и предоставления информации о файлах, каталогах и уведомлениях об изменениях.
Какие файлы вы хотите удалить? Почему бы не использовать как всегда File.Delete или FileInfo.Delete ? Классы System.IO не зависят от NTFS, они в конечном итоге используют API файловой системы каждой операционной системы. Возможно, вас беспокоит разница в пути в Linux и Windows?
@PanagiotisKanavos, как вы упомянули, меня беспокоит другой путь в ОС, такой как Linux, Windows и .
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно.
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей.
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то.
Ответы 1
В комментариях вы высказали предположение, что вас беспокоит другая форма пути в разных операционных системах, в которых может работать ваш код. Пока вы не пытаетесь объединить части string.Concat или + своих путей вместе, построить их в StringBuilder или каким-либо иным образом попытаться сделать вид, что вы сможете построить действительный путь самостоятельно в любых обстоятельствах. будь умницей :). Классы, относящиеся к файловой системе, в пространстве имен System.IO существуют специально, чтобы помочь вам сделать это правильно, поэтому используйте их.
Если у вас уже есть экземпляр IFileProvider откуда-то еще (скажем, что вы используете, чтобы перечислить файлы в отображать для пользователей, чтобы они могли выбрать, какие из них удалить), вы можете смешать и сопоставить это с System.IO , возможно, примерно так:
Нет абсолютно никакой проверки ошибок, валидации, обработки исключений или чего-либо еще, что могло бы удаленно сделать этот производственный код здесь. (с исключением возможный фактической проверки того, что запись в каталоге не является каталогом!), Поэтому, пожалуйста, не используйте его как есть.
На равных: Если у вас нет экземпляра IFileSystem ниоткуда, не чувствуйте себя обязанным создавать его только для удаления файлов!
Другие вопросы по теме
System.DllNotFoundException: 'Невозможно загрузить DLL' libwkhtmltox ': указанный модуль не найден. (Исключение из HRESULT: 0x8007007E) '
Читайте также: