Just a few general design comments :
API
1. Structure is nice and I see you are leveraging the response codes but for a post, you are creating your own response? Look into the ResponseCreatedAt option.
2. It's never a bad idea to have some xml documentation comments above each method ( parakeets, return types, method descriptions etc). Although your methods are basic CRUD, it's good practice to get into.
3. While you're student api is behind basic authentication, the user is not, so quite a security risk. You can also wrap the whole controller in basic vs each method as you have done, semantics but easy read.
Datalayer
1. In one you use IEnumerable instead of List, I would stick with just list.
2. You can modify your using so that it does the open itself, no need to explicitly state it every time
3. While storeprocs are great, unless you really need to, you can save yourself a lot of code by leveraging dapper ( can't recall if its base or the dapper.contrib.extensions ) but you can do object crud. That saves you have to explicitly define store procedures and parameters. I keep those for db heavy operations. Look into the dapper methods like connection.Insert, .Update . Delete. These simply take a instance of the object as a single parameter.
4. For Bulk operations, which you havent listed, look into leveraging Table Value Parameters in SQL and using dapper to pass lists of those for bulk. There I use procedures and you can also leverage Merge statements.
Model
1. We use the dapper annotation of Key to identify our primary keys to assist the persistence engine.
2. I don't see id fields in your models but your api has id values? I personally like to ensure that the primary key of any table is a simple numeric ID ( one can use GUIDs etc, lots of schools of thought on that ). It makes sense utilizing id fields across queries vs string based fields ( performance )
3. As a design philosophy, I tend to avoid "hard deletes". Although we call it delete in name, it actually runs a update against the table flagging who deleted and when. This keeps good audit and if your record is referenced elsewhere, it doesn't break data integrity by its removal ( yes there are other ways as well but this helps keep a clean audit trail too)
Just a few pointers but hope they help
@Solarion