<script type="text/javascript" src="https://ormdb.github.io/ormdb/ormdb.min.js" crossorigin="anonymous" async></script>
var cn = new System.Data.SQLite.SQLiteConnection("Data Source =.\\w3schools.sqlite; Version = 3;");
using( var cn = [YourConnection] )
cn.OpenIf();
Console.WriteLine("\tOrmDb v." + Odb.Version.ToString() + "\n");
Console.WriteLine("Connection State = " + cn.State.ToString());
Console.WriteLine(String.Empty);
var prv = cn.GetProvider();
Console.WriteLine("\tProvider = " + prv.Name);
Console.WriteLine("\tConnector = " + prv.FullName + "\n");
var ddl = cn.DDL();
Console.WriteLine("\tServer DateTime = " + ddl.GetServerDateTime());
Console.WriteLine("\tPing = " + ddl.PingServer().TotalMilliseconds + "ms\n");
var si = ddl.ServerInfo();
Console.WriteLine("\tServer Name = " + si.Name);
Console.WriteLine("\tServer Version = " + si.Version);
}
using Odb;
using Odb.Table;
using System.Linq.Expressions;
namespace MyApp.Models {
public class Orders : Base
{
[Column()] public int? OrderID { get; set; }
[Column()] public int? CustomerID { get; set; }
[Column()] public int? EmployeeID { get; set; }
[Column()] public DateTime OrderDate { get; set; }
[Column(DefaultValue = 1)] public int? ShipperID { get; set; }
[Column(Length = 255)] public string Note { get; set; }
public List<OrderDetails> Details { get; set; }
protected override Expression<TableConfig> Config() =>
(x) => x.SetPrimaryKey(OrderID);
}
public class OrderDetails : Base
{
[Column(AutoIncrement = true)] public int OrderDetailID { get; set; }
[Column()] public int? OrderID { get; set; }
[Column()] public int? ProductID { get; set; }
[Column()] public decimal Quantity { get; set; }
protected override Expression<TableConfig> Config() =>
(x) => x.SetPrimaryKey(OrderDetailID);
}
}
using( var cn = [YourConnection] )
{
var prv = cn.GetProvider();
var tables = prv.GetTables();
foreach(var tb in new Odb.Table.Base[] {Models.Orders , Models.OrderDetails}){
if (tables.Exists(x => x.Name.ToLower() == tb.GetName().ToLower()))
continue;
prv.CreateTable(tb);
}
}
// ---------------------------------------------
// sample data ,s being generated
var Sample_Orders = new List<Models.Orders>();
var id = 0;
var order_date = new DateTime(2000, 06, 1);
foreach (var customer_id in new[] { 11, 12, 13, 14, 15 })
{
foreach (var employee_id in new[] { 21, 22, 23 })
{
foreach (var shipper_id in new[] { 31, 32 })
{
id++;
var item = new Models.Orders();
item.OrderID = 1000 + id;
item.CustomerID = customer_id;
item.EmployeeID = employee_id;
item.ShipperID = shipper_id;
item.OrderDate = order_date;
item.Note = "Order Number = " + item.OrderID;
item.Details = new List<Models.OrderDetails>();
item.Details.Add(new OrderDetails() { OrderID = item.OrderID, ProductID = 41, Quantity = 10 });
item.Details.Add(new OrderDetails() { OrderID = item.OrderID, ProductID = 42, Quantity = 15 });
item.Details.Add(new OrderDetails() { OrderID = item.OrderID, ProductID = 43, Quantity = 5 });
item.Details.Add(new OrderDetails() { OrderID = item.OrderID, ProductID = 44, Quantity = 30 });
Sample_Orders.Add(item);
}
}
order_date = order_date.AddDays(1);
}
// ---------------------------------------------
using( var cn = [YourConnection] )
{
var query = Odb.SQL.Insert();
foreach (var order in Sample_Orders)
{
query.Add(ord);
foreach (var detail in order.Details)
query.Add(det);
}
var affectedRows = cn.Sql(query).NonQuery();
}
var t1 = new Models.Orders().AsQueryable();
// If the model will be use twice in a query, then you can define multiple alias for the same model.
var t2 = new Models.Orders().AsQueryable();
using( var cn = [YourConnection] )
{
var query = Odb.SQL.Select(x => x.From(t1));
var result = cn.Sql(query).Read().ToDataTable();
// or
var result = cn.Sql(query).Map<Orders>();
}
using( var cn = [YourConnection] )
{
var query = Odb.SQL.Update(x =>
x.From(t1)
.Where(t1.OrderID == 1000)
.Set(t1.OrderID.OrderDate, DateTime.Now)
);
var affected_rows = cn.Sql(query).NonQuery();
}
using( var cn = [YourConnection] )
{
var query = Odb.SQL.Delete(x =>
x.From(t1)
.Where(t1.OrderID == 1000)
);
var affected_rows = cn.Sql(query).NonQuery();
}