Build a C# application
The following tutorial implements a REST API server using the Entity Framework ORM. The scenario is that of an e-commerce application where database access is managed using the Entity Framework Core. It includes the following tables:
users
— the users of the e-commerce siteproducts
— the products being soldorders
— the orders placed by the usersorderline
— each line item of an order
The source for the above application can be found in the Using ORMs with YugabyteDB repository.
Prerequisites
The tutorial assumes that you have:
-
YugabyteDB up and running. If you are new to YugabyteDB, follow the steps in Quick start to have YugabyteDB up and running in minutes.
-
.NET framework installed.
Clone the "orm-examples" repository
$ git clone https://github.com/yugabyte/orm-examples.git && cd orm-examples/csharp/entityframework
Database configuration
- To modify the database connection settings, change the default
ConnectionStrings
inappsettings.json
file which is in the following format:
Host=$hostName; Port=$dbPort; Username=$dbUser; Password=$dbPassword; Database=$database
Properties | Description | Default |
---|---|---|
Host | Database server IP address or DNS name. | 127.0.0.1 |
Port | Database port where it accepts client connections. | 5433 |
Username | The username to connect to the database. | yugabyte |
Password | The password to connect to the database. | yugabyte |
Database | Database instance in database server. | ysql_entityframework |
Start the REST API server
To change default port for REST API Server, go to Properties/launchSettings.json
and change the applicationUrl
field.
- Build the REST API server.
$ dotnet build
- Run the REST API server
$ dotnet run
The REST server will run at http://localhost:8080
by default.
Send requests to the application
Create 2 users.
$ curl --data '{ "firstName" : "John", "lastName" : "Smith", "email" : "jsmith@example.com" }' \
-v -X POST -H 'Content-Type:application/json' http://localhost:8080/users
$ curl --data '{ "firstName" : "Tom", "lastName" : "Stewart", "email" : "tstewart@example.com" }' \
-v -X POST -H 'Content-Type:application/json' http://localhost:8080/users
Create 2 products.
$ curl \
--data '{ "productName": "Notebook", "description": "200 page notebook", "price": 7.50 }' \
-v -X POST -H 'Content-Type:application/json' http://localhost:8080/products
$ curl \
--data '{ "productName": "Pencil", "description": "Mechanical pencil", "price": 2.50 }' \
-v -X POST -H 'Content-Type:application/json' http://localhost:8080/products
Verify the userId
and productId
from the database using the following YSQL commands.
yugabyte=# \c ysql_entityframework
You are now connected to database "ysql_entityframework" as user "yugabyte".
ysql_entityframework=# SELECT count(*) FROM users;
user_id | first_name | last_name | user_email
---------+------------+-----------+----------------------
1 | John | Smith | jsmith@example.com
101 | Tom | Stewart | tstewart@example.com
(2 rows)
ysql_entityframework=# SELECT count(*) FROM products;
product_id | description | price | product_name
------------+-------------------+-------+--------------
1 | 200 page notebook | 7.50 | Notebook
101 | Mechanical pencil | 2.50 | Pencil
(2 rows)
Create 2 orders with products using the userId
for John.
$ curl \
--data '{ "userId": "1", "products": [ { "productId": 1, "units": 2 } ] }' \
-v -X POST -H 'Content-Type:application/json' http://localhost:8080/orders
$ curl \
--data '{ "userId": "1", "products": [ { "productId": 1, "units": 2 }, { "productId": 101, "units": 4 } ] }' \
-v -X POST -H 'Content-Type:application/json' http://localhost:8080/orders
Query results
Using the YSQL shell
ysql_entityframework=# SELECT count(*) FROM users;
count
-------
2
(1 row)
ysql_entityframework=# SELECT count(*) FROM products;
count
-------
2
(1 row)
ysql_entityframework=# SELECT count(*) FROM orders;
count
-------
2
(1 row)
Using the REST API
To use the REST API server to verify that the users, products, and orders were created in the ysql_entityframework
database, enter the following commands. The results are output in JSON format.
$ curl http://localhost:8080/users
{
"content": [
{
"userId": 101,
"firstName": "Tom",
"lastName": "Stewart",
"email": "tstewart@example.com"
},
{
"userId": 1,
"firstName": "John",
"lastName": "Smith",
"email": "jsmith@example.com"
}
],
...
}
$ curl http://localhost:8080/products
{
"content": [
{
"productId": 101,
"productName": "Pencil",
"description": "Mechanical pencil",
"price": 2.5
},
{
"productId": 1,
"productName": "Notebook",
"description": "200 page notebook",
"price": 7.5
}
],
...
}
$ curl http://localhost:8080/orders
{
"content": [
{
"orderId":"2692e1e9-0bbd-40e8-bf51-4fbcc4e9fea2",
"orderTime":"2022-02-24T02:32:52.60555",
"orderTotal":15.00,
"userId":1,
"users":null,
"products":null
},
{
"orderId":"f7343f22-7dfc-4a18-b4d3-9fcd17161518",
"orderTime":"2022-02-24T02:33:06.832663",
"orderTotal":25.00,
"userId":1,
"users":null,
"products":null
}
]
}
Explore the source
The application source is available in the orm-examples repository.