OData CRUD (Create, Read, Update, Delete) İşlemleri
Open Data ile yalnızca seçme ($select), filtreleme ($filter), sıralama ($orderby) v.b. işlemleri yapmıyor; ayrıca crud işlemlerini de gerçekleştirebiliyoruz. Bu yazıda bu işlemleri nasıl yaptığımızı inceliyor olacağız, önceki OData yazılarıma bakmadıysan aşağıdan ulaşabilirsin.
- GraphQL’i beğendin mi? OData’yı dene!
- OData Routing Kuralları ve Özelleştirme
- OData Function & Action Kullanımı
Yazıya başlamadan evvel; bu işlemleri direk olarak Entity Framework ile iletişimde olarak değil kendi mimari yapına uygulayarak da kullanabilirsin. (Örneğin: Repository Pattern) Ayrıca Crud işlemleri için custom routing kullanmak istersen bir önceki yazıma yukarıdan ulaşabilir veya resmi sitesindeki dökümantasyonuna göz atabilirsin. Şimdi routing conventionları tekrar hatırlayalım. OData yazı serisi boyunca kullanmış olduğum projeye buradan erişebilirsin.
Method | Uri | Action | Controller |
POST | /Categories | Post(Category) | CategoriesController |
PostCategory(Category) | |||
PUT | /Categories(1) | Put(key, Category) | |
PutCategory(key, Category) | |||
DELETE | /Categories(1) | Delete(key) | |
DeleteCategory(key) |
Create işlemleri
Create ile kayıt oluşturma işlemlerini POST metoduyla gerçekleştiriyoruz, işlemi gerçekleştirecek action methodumuzu yazalım.
public class CategoriesController : ODataController
{
[HttpPost]
public IActionResult Post([FromBody] Category category)
{
_dbContext.Categories.Add(category);
_dbContext.SaveChanges();
return Ok(category);
}
}
https://localhost:44357/odata/categories adresine ekleyeceğimiz kategori bilgilerini POST edelim.
{
"Name": "Motosiklet",
"Description": "Lorem ipsum dolor sit amet.",
"CreatedOn": "2021-01-03T18:08:01.1375544+03:00"
}
Read işlemleri
Daha önce bu işlemi gerçekleştirecek action methodumuzu yazmıştık, bütünlük oluşturması amacıyla burada da yazacağım, detaylı bilgi almak için önceki yazıma göz atabilirsin. Bu method GET ile çalışacaktır.
[EnableQuery]
public IActionResult Get([FromODataUri] int key)
{
return Ok(_dbContext.Categories.Where(w => w.Id == key));
}
https://localhost:44357/odata/categories(1) adresine istek attığımızda ilgili kategori bilgisini aldığımızı göreceğiz.
Update işlemleri
Update ile kayıt güncelleme işlemlerini PUT metoduyla gerçekleştiriyoruz, işlemi gerçekleştirecek action methodumuzu yazalım.
[HttpPut]
public IActionResult Put([FromODataUri]int key, [FromBody] Category category)
{
category.Id = key;
_dbContext.Entry(category).State = EntityState.Modified;
_dbContext.SaveChanges();
return Updated(category);
}
https://localhost:44357/odata/categories adresine ekleyeceğimiz kategori bilgilerini PUT edelim.
{
"Name": "Motosiklet",
"Description": "Lorem ipsum dolor sit amet.",
"CreatedOn": "2021-01-03T18:08:01.1375544+03:00"
}
https://localhost:44357/odata/categories(4) adresine istek attığımızda bilgilerimizin güncellendiğini göreceğiz.
Delete işlemleri
Delete ile kayıt silme işlemlerini DELETE metoduyla gerçekleştiriyoruz, işlemi gerçekleştirecek action methodumuzu yazalım.
[HttpDelete]
public IActionResult Delete([FromODataUri] int key)
{
var categoryToDelete = _dbContext.Categories.Find(key);
if(categoryToDelete == null)
{
return NotFound();
}
_dbContext.Categories.Remove(categoryToDelete);
_dbContext.SaveChanges();
return NoContent();
}
https://localhost:44357/odata/categories(4) adresine istek gönderdiğimizde kaydımızın silindiğini görüyor olacağız.