using Microsoft.AspNetCore.Mvc;
using Starcounter.Database;
public abstract class Item
public abstract int Id { get; set; }
public abstract string Name { get; set; }
namespace DiSample.Controllers
public class DbAccessController : Controller
private readonly IDdlExecutor _ddlExecutor;
private readonly ITransactor _transactor;
// The DbAccessController class requires
// two services: IDdlExecutor & ITransactor.
public DbAccessController(IDdlExecutor ddlExecutor, ITransactor transactor)
_ddlExecutor = ddlExecutor;
_transactor = transactor;
// Perform Starcounter DML operations.
// Select an Item with specified id.
// Create one if there is no such item yet.
// Return as JSON string.
public string GetItem(int id)
_transactor.Transact(db =>
"SELECT i FROM DiSample.Item i WHERE i.Id = ?",
item = db.Insert<Item>();
item.Name = DateTime.Now.ToString();
result = JsonConvert.SerializeObject(item);
// Perform Starcounter DDL operation.
public string CreateIndex()
_ddlExecutor.Execute("CREATE INDEX IX_DiSample_Item ON Item (Id)");
return "Database index IX_DiSample_Item has been successfully created.";
// Perform Starcounter DDL operation.
public string DropIndex()
_ddlExecutor.Execute("DROP INDEX IX_DiSample_Item ON Item");
return "Database index IX_DiSample_Item has been successfully dropped.";