Skip to content

Commit

Permalink
Services with DbContextOptions DI
Browse files Browse the repository at this point in the history
  • Loading branch information
gustavnavar committed Nov 14, 2019
1 parent 9628d5b commit 39c5faf
Show file tree
Hide file tree
Showing 7 changed files with 148 additions and 97 deletions.
13 changes: 9 additions & 4 deletions GridBlazor/GridCreateComponent.razor
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@
<div class="form-horizontal">
@foreach (var column in GridComponent.Grid.Columns)
{
var typeAndValue = ((IGridColumn<T>)column).GetTypeAndValue(Item);
var type = typeAndValue.Item1;
object value = typeAndValue.Item2;
var (type, value) = ((IGridColumn<T>)column).GetTypeAndValue(Item);
<div class="form-group" style="@(column.CrudHidden?"display:none;":"")">
<label for="@column.FieldName" class="control-label col-md-2">@column.Title</label>
<div class="@(type == typeof(bool)?"col-md-1":"col-md-5")">
Expand Down Expand Up @@ -81,7 +79,14 @@
}
else if (type == typeof(bool))
{
<input id="@column.FieldName" type="checkbox" class="form-control" value="@column.GetFormatedValue(value)" @onchange="(e) => ChangeBool(e, column)" />
if ((bool)value == true)
{
<input id="@column.FieldName" type="checkbox" class="form-control" checked="checked" value="true" @onchange="(e) => ChangeBool(e, column)" />
}
else
{
<input id="@column.FieldName" type="checkbox" class="form-control" value="false" @onchange="(e) => ChangeBool(e, column)" />
}
}
else
{
Expand Down
13 changes: 9 additions & 4 deletions GridBlazor/GridDeleteComponent.razor
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,20 @@
<div class="form-horizontal">
@foreach (var column in GridComponent.Grid.Columns)
{
var typeAndValue = ((IGridColumn<T>)column).GetTypeAndValue(Item);
var type = typeAndValue.Item1;
object value = typeAndValue.Item2;
var (type, value) = ((IGridColumn<T>)column).GetTypeAndValue(Item);
<div class="form-group" style="@(column.CrudHidden?"display:none;":"")">
<label for="@column.FieldName" class="control-label col-md-2">@column.Title</label>
<div class="@(type == typeof(bool)?"col-md-1":"col-md-5")">
@if (type == typeof(bool))
{
<input id="@column.FieldName" type="checkbox" class="form-control" disabled="disabled" readonly="readonly" checked="@value" value="@column.GetFormatedValue(value)" />
if ((bool)value == true)
{
<input id="@column.FieldName" type="checkbox" class="form-control" disabled="disabled" readonly="readonly" checked="checked" value="true" />
}
else
{
<input id="@column.FieldName" type="checkbox" class="form-control" disabled="disabled" readonly="readonly" value="false" />
}
}
else
{
Expand Down
13 changes: 9 additions & 4 deletions GridBlazor/GridReadComponent.razor
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,20 @@
<div class="form-horizontal">
@foreach (var column in GridComponent.Grid.Columns)
{
var typeAndValue = ((IGridColumn<T>)column).GetTypeAndValue(Item);
var type = typeAndValue.Item1;
object value = typeAndValue.Item2;
var (type, value) = ((IGridColumn<T>)column).GetTypeAndValue(Item);
<div class="form-group" style="@(column.CrudHidden?"display:none;":"")">
<label for="@column.FieldName" class="control-label col-md-2">@column.Title</label>
<div class="@(type == typeof(bool)?"col-md-1":"col-md-5")">
@if (type == typeof(bool))
{
<input id="@column.FieldName" type="checkbox" class="form-control" disabled="disabled" readonly="readonly" checked="@value" value="@column.GetFormatedValue(value)" />
if ((bool)value == true)
{
<input id="@column.FieldName" type="checkbox" class="form-control" disabled="disabled" readonly="readonly" checked="checked" value="true" />
}
else
{
<input id="@column.FieldName" type="checkbox" class="form-control" disabled="disabled" readonly="readonly" value="false" />
}
}
else
{
Expand Down
13 changes: 9 additions & 4 deletions GridBlazor/GridUpdateComponent.razor
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@
<div class="form-horizontal">
@foreach (var column in GridComponent.Grid.Columns)
{
var typeAndValue = ((IGridColumn<T>)column).GetTypeAndValue(Item);
var type = typeAndValue.Item1;
object value = typeAndValue.Item2;
var (type, value) = ((IGridColumn<T>)column).GetTypeAndValue(Item);
<div class="form-group" style="@(column.CrudHidden?"display:none;":"")">
<label for="@column.FieldName" class="control-label col-md-2">@column.Title</label>
<div class="@(type == typeof(bool)?"col-md-1":"col-md-5")">
Expand Down Expand Up @@ -81,7 +79,14 @@
}
else if (type == typeof(bool))
{
<input id="@column.FieldName" type="checkbox" class="form-control" value="@column.GetFormatedValue(value)" @onchange="(e) => ChangeBool(e, column)" />
if ((bool)value == true)
{
<input id="@column.FieldName" type="checkbox" class="form-control" checked="checked" value="true" @onchange="(e) => ChangeBool(e, column)" />
}
else
{
<input id="@column.FieldName" type="checkbox" class="form-control" value="false" @onchange="(e) => ChangeBool(e, column)" />
}
}
else
{
Expand Down
40 changes: 22 additions & 18 deletions GridBlazorServerSide/Services/CustomerService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,36 +14,40 @@ namespace GridBlazorServerSide.Services
{
public class CustomerService : ICustomerService
{
private readonly NorthwindDbContext _context;
private readonly DbContextOptions<NorthwindDbContext> _options;

public CustomerService()
public CustomerService(DbContextOptions<NorthwindDbContext> options)
{
var builder = new DbContextOptionsBuilder<NorthwindDbContext>();
builder.UseSqlServer(Startup.ConnectionString);
_context = new NorthwindDbContext(builder.Options);
_options = options;
}

public IEnumerable<string> GetCustomersNames()
{
var repository = new CustomersRepository(_context);
return repository.GetAll().Select(r => r.CompanyName).ToList();
using (var context = new NorthwindDbContext(_options))
{
var repository = new CustomersRepository(context);
return repository.GetAll().Select(r => r.CompanyName).ToList();
}
}

public ItemsDTO<Customer> GetCustomersGridRows(Action<IGridColumnCollection<Customer>> columns,
QueryDictionary<StringValues> query)
{
var repository = new CustomersRepository(_context);
var server = new GridServer<Customer>(repository.GetAll(), new QueryCollection(query),
true, "customersGrid", columns)
.Sortable()
.WithPaging(10)
.Filterable()
.WithMultipleFilters()
.Searchable(true, false);
using (var context = new NorthwindDbContext(_options))
{
var repository = new CustomersRepository(context);
var server = new GridServer<Customer>(repository.GetAll(), new QueryCollection(query),
true, "customersGrid", columns)
.Sortable()
.WithPaging(10)
.Filterable()
.WithMultipleFilters()
.Searchable(true, false);

// return items to displays
var items = server.ItemsToDisplay;
return items;
// return items to displays
var items = server.ItemsToDisplay;
return items;
}
}
}

Expand Down
147 changes: 87 additions & 60 deletions GridBlazorServerSide/Services/OrderService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using GridShared;
using GridShared.Utility;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Primitives;
using System;
using System.Threading.Tasks;
Expand All @@ -12,106 +13,132 @@ namespace GridBlazorServerSide.Services
{
public class OrderService : IOrderService
{
private readonly DbContextOptions<NorthwindDbContext> _options;

private readonly NorthwindDbContext _context;

public OrderService(NorthwindDbContext context)
public OrderService(DbContextOptions<NorthwindDbContext> options)
{
_context = context;
_options = options;
}

public ItemsDTO<Order> GetOrdersGridRows(Action<IGridColumnCollection<Order>> columns,
QueryDictionary<StringValues> query)
{
var repository = new OrdersRepository(_context);
var server = new GridServer<Order>(repository.GetAll(), new QueryCollection(query),
true, "ordersGrid", columns)
.Sortable()
.WithPaging(10)
.Filterable()
.WithMultipleFilters()
.Groupable(true)
.Searchable(true, false);

// return items to displays
var items = server.ItemsToDisplay;

// uncomment the following lines are to test null responses
//items = null;
//items.Items = null;
//items.Pager = null;
return items;
using (var context = new NorthwindDbContext(_options))
{
var repository = new OrdersRepository(context);
var server = new GridServer<Order>(repository.GetAll(), new QueryCollection(query),
true, "ordersGrid", columns)
.Sortable()
.WithPaging(10)
.Filterable()
.WithMultipleFilters()
.Groupable(true)
.Searchable(true, false);

// return items to displays
var items = server.ItemsToDisplay;

// uncomment the following lines are to test null responses
//items = null;
//items.Items = null;
//items.Pager = null;
return items;
}
}

public ItemsDTO<Order> GetOrdersGridRows(QueryDictionary<StringValues> query)
{
var repository = new OrdersRepository(_context);
var server = new GridServer<Order>(repository.GetAll(), new QueryCollection(query),
true, "ordersGrid", null).AutoGenerateColumns();

// return items to displays
return server.ItemsToDisplay;
using (var context = new NorthwindDbContext(_options))
{
var repository = new OrdersRepository(context);
var server = new GridServer<Order>(repository.GetAll(), new QueryCollection(query),
true, "ordersGrid", null).AutoGenerateColumns();

// return items to displays
return server.ItemsToDisplay;
}
}

public ItemsDTO<OrderDetail> GetOrderDetailsGridRows(Action<IGridColumnCollection<OrderDetail>> columns,
object[] keys, QueryDictionary<StringValues> query)
{
int orderId;
int.TryParse(keys[0].ToString(), out orderId);
var repository = new OrderDetailsRepository(_context);
var server = new GridServer<OrderDetail>(repository.GetForOrder(orderId), new QueryCollection(query),
true, "orderDetailssGrid" + keys[0].ToString(), columns)
.Sortable()
.WithPaging(10)
.Filterable()
.WithMultipleFilters();

// return items to displays
var items = server.ItemsToDisplay;
return items;
using (var context = new NorthwindDbContext(_options))
{
int orderId;
int.TryParse(keys[0].ToString(), out orderId);
var repository = new OrderDetailsRepository(context);
var server = new GridServer<OrderDetail>(repository.GetForOrder(orderId), new QueryCollection(query),
true, "orderDetailssGrid" + keys[0].ToString(), columns)
.Sortable()
.WithPaging(10)
.Filterable()
.WithMultipleFilters();

// return items to displays
var items = server.ItemsToDisplay;
return items;
}
}

public async Task<Order> GetOrder(int OrderId)
{
var repository = new OrdersRepository(_context);
return await repository.GetById(OrderId);
using (var context = new NorthwindDbContext(_options))
{
var repository = new OrdersRepository(context);
return await repository.GetById(OrderId);
}
}

public async Task UpdateAndSave(Order order)
{
var repository = new OrdersRepository(_context);
await repository.Update(order);
repository.Save();
using (var context = new NorthwindDbContext(_options))
{
var repository = new OrdersRepository(context);
await repository.Update(order);
repository.Save();
}
}

public async Task<Order> Get(params object[] keys)
{
int orderId;
int.TryParse(keys[0].ToString(), out orderId);
var repository = new OrdersRepository(_context);
return await repository.GetById(orderId);
using (var context = new NorthwindDbContext(_options))
{
int orderId;
int.TryParse(keys[0].ToString(), out orderId);
var repository = new OrdersRepository(context);
return await repository.GetById(orderId);
}
}

public async Task Insert(Order item)
{
var repository = new OrdersRepository(_context);
await repository.Insert(item);
repository.Save();
using (var context = new NorthwindDbContext(_options))
{
var repository = new OrdersRepository(context);
await repository.Insert(item);
repository.Save();
}
}

public async Task Update(Order item)
{
var repository = new OrdersRepository(_context);
await repository.Update(item);
repository.Save();
using (var context = new NorthwindDbContext(_options))
{
var repository = new OrdersRepository(context);
await repository.Update(item);
repository.Save();
}
}

public async Task Delete(params object[] keys)
{
var order = Get(keys);
var repository = new OrdersRepository(_context);
await repository.Delete(order);
repository.Save();
using (var context = new NorthwindDbContext(_options))
{
var order = Get(keys);
var repository = new OrdersRepository(context);
await repository.Delete(order);
repository.Save();
}
}
}

Expand Down
6 changes: 3 additions & 3 deletions GridBlazorServerSide/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@ public void ConfigureServices(IServiceCollection services)
{
options.UseSqlServer(ConnectionString);
//options.ConfigureWarnings(warnings => warnings.Ignore(RelationalEventId.QueryClientEvaluationWarning));
}, ServiceLifetime.Transient);
});

services.AddControllers();
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddTransient<IOrderService, OrderService>();
services.AddTransient<ICustomerService, CustomerService>();
services.AddScoped<IOrderService, OrderService>();
services.AddScoped<ICustomerService, CustomerService>();

services.AddGridMvc();

Expand Down

0 comments on commit 39c5faf

Please sign in to comment.