Asked by:
Database first approach with DI plugin

Question
-
User-171003712 posted
Dear All,
I have seen many project those using Code first and using DI with Autofac IoC . My point is im upgrading or rewritten my monolithic application to new pattern like DI , IoC and plugin so study many projects like NOPnopcommerce etc. But my limitation is i have to use my existing db and use DB first approach. so i convert one application and use DB first and with Autofac , and create one db Model and create one manually interface and register but problem is every time db model update then every time have to inherit the Interface to DB model like MyDbContext :DbContext, IMyDbContext so every time have update with Interface. so i have to solve this one problem .
next i have google and getting db first approach but they using new keyword and create a object which is i already handle by Autofac.
public class Customer { DIDbContext dbContext = new DIDbContext(); public int Create(Customer customer) { if (customer != null) { dbContext.Customers.Add(customer); dbContext.SaveChanges(); return 1; } return 0; } public IEnumerable<customer> GetAllCustomers() { return dbContext.Customers.ToList(); } }
so i dont want to create new object every time which is alredy handle by Autofac.
so please give me some idea with DB first and without new object in every repository.//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------namespace Repository_Database
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Core.Objects;
using System.Linq;
public partial class Northwind_DBEntities : DbContext, Repository_Database.INorthwind_DBEntities
{
public Northwind_DBEntities()
: base("name=Northwind_DBEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Category> Categories { get; set; }
public virtual DbSet<CustomerDemographic> CustomerDemographics { get; set; }
public virtual DbSet<Customer> Customers { get; set; }
public virtual DbSet<Employee> Employees { get; set; }
public virtual DbSet<Order_Detail> Order_Details { get; set; }
public virtual DbSet<Order> Orders { get; set; }
public virtual DbSet<Product> Products { get; set; }
public virtual DbSet<Region> Regions { get; set; }
public virtual DbSet<Shipper> Shippers { get; set; }
public virtual DbSet<Supplier> Suppliers { get; set; }
public virtual DbSet<sysdiagram> sysdiagrams { get; set; }
public virtual DbSet<Territory> Territories { get; set; }
public virtual DbSet<Alphabetical_list_of_product> Alphabetical_list_of_products { get; set; }
public virtual DbSet<Category_Sales_for_1997> Category_Sales_for_1997 { get; set; }
public virtual DbSet<Current_Product_List> Current_Product_Lists { get; set; }
public virtual DbSet<Customer_and_Suppliers_by_City> Customer_and_Suppliers_by_Cities { get; set; }
public virtual DbSet<Invoice> Invoices { get; set; }
public virtual DbSet<Order_Details_Extended> Order_Details_Extendeds { get; set; }
public virtual DbSet<Order_Subtotal> Order_Subtotals { get; set; }
public virtual DbSet<Orders_Qry> Orders_Qries { get; set; }
public virtual DbSet<Product_Sales_for_1997> Product_Sales_for_1997 { get; set; }
public virtual DbSet<Products_Above_Average_Price> Products_Above_Average_Prices { get; set; }
public virtual DbSet<Products_by_Category> Products_by_Categories { get; set; }
public virtual DbSet<Sales_by_Category> Sales_by_Categories { get; set; }
public virtual DbSet<Sales_Totals_by_Amount> Sales_Totals_by_Amounts { get; set; }
public virtual DbSet<Summary_of_Sales_by_Quarter> Summary_of_Sales_by_Quarters { get; set; }
public virtual DbSet<Summary_of_Sales_by_Year> Summary_of_Sales_by_Years { get; set; }
public virtual ObjectResult<CustOrderHist_Result> CustOrderHist(string customerID)
{
var customerIDParameter = customerID != null ?
new ObjectParameter("CustomerID", customerID) :
new ObjectParameter("CustomerID", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<CustOrderHist_Result>("CustOrderHist", customerIDParameter);
}
public virtual ObjectResult<CustOrdersDetail_Result> CustOrdersDetail(Nullable<int> orderID)
{
var orderIDParameter = orderID.HasValue ?
new ObjectParameter("OrderID", orderID) :
new ObjectParameter("OrderID", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<CustOrdersDetail_Result>("CustOrdersDetail", orderIDParameter);
}
public virtual ObjectResult<CustOrdersOrders_Result> CustOrdersOrders(string customerID)
{
var customerIDParameter = customerID != null ?
new ObjectParameter("CustomerID", customerID) :
new ObjectParameter("CustomerID", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<CustOrdersOrders_Result>("CustOrdersOrders", customerIDParameter);
}
public virtual ObjectResult<Employee_Sales_by_Country_Result> Employee_Sales_by_Country(Nullable<System.DateTime> beginning_Date, Nullable<System.DateTime> ending_Date)
{
var beginning_DateParameter = beginning_Date.HasValue ?
new ObjectParameter("Beginning_Date", beginning_Date) :
new ObjectParameter("Beginning_Date", typeof(System.DateTime));
var ending_DateParameter = ending_Date.HasValue ?
new ObjectParameter("Ending_Date", ending_Date) :
new ObjectParameter("Ending_Date", typeof(System.DateTime));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Employee_Sales_by_Country_Result>("Employee_Sales_by_Country", beginning_DateParameter, ending_DateParameter);
}
public virtual ObjectResult<Sales_by_Year_Result> Sales_by_Year(Nullable<System.DateTime> beginning_Date, Nullable<System.DateTime> ending_Date)
{
var beginning_DateParameter = beginning_Date.HasValue ?
new ObjectParameter("Beginning_Date", beginning_Date) :
new ObjectParameter("Beginning_Date", typeof(System.DateTime));
var ending_DateParameter = ending_Date.HasValue ?
new ObjectParameter("Ending_Date", ending_Date) :
new ObjectParameter("Ending_Date", typeof(System.DateTime));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Sales_by_Year_Result>("Sales_by_Year", beginning_DateParameter, ending_DateParameter);
}
public virtual ObjectResult<SalesByCategory_Result> SalesByCategory(string categoryName, string ordYear)
{
var categoryNameParameter = categoryName != null ?
new ObjectParameter("CategoryName", categoryName) :
new ObjectParameter("CategoryName", typeof(string));
var ordYearParameter = ordYear != null ?
new ObjectParameter("OrdYear", ordYear) :
new ObjectParameter("OrdYear", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<SalesByCategory_Result>("SalesByCategory", categoryNameParameter, ordYearParameter);
}
public virtual int sp_alterdiagram(string diagramname, Nullable<int> owner_id, Nullable<int> version, byte[] definition)
{
var diagramnameParameter = diagramname != null ?
new ObjectParameter("diagramname", diagramname) :
new ObjectParameter("diagramname", typeof(string));
var owner_idParameter = owner_id.HasValue ?
new ObjectParameter("owner_id", owner_id) :
new ObjectParameter("owner_id", typeof(int));
var versionParameter = version.HasValue ?
new ObjectParameter("version", version) :
new ObjectParameter("version", typeof(int));
var definitionParameter = definition != null ?
new ObjectParameter("definition", definition) :
new ObjectParameter("definition", typeof(byte[]));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_alterdiagram", diagramnameParameter, owner_idParameter, versionParameter, definitionParameter);
}
public virtual int sp_creatediagram(string diagramname, Nullable<int> owner_id, Nullable<int> version, byte[] definition)
{
var diagramnameParameter = diagramname != null ?
new ObjectParameter("diagramname", diagramname) :
new ObjectParameter("diagramname", typeof(string));
var owner_idParameter = owner_id.HasValue ?
new ObjectParameter("owner_id", owner_id) :
new ObjectParameter("owner_id", typeof(int));
var versionParameter = version.HasValue ?
new ObjectParameter("version", version) :
new ObjectParameter("version", typeof(int));
var definitionParameter = definition != null ?
new ObjectParameter("definition", definition) :
new ObjectParameter("definition", typeof(byte[]));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_creatediagram", diagramnameParameter, owner_idParameter, versionParameter, definitionParameter);
}
public virtual int sp_dropdiagram(string diagramname, Nullable<int> owner_id)
{
var diagramnameParameter = diagramname != null ?
new ObjectParameter("diagramname", diagramname) :
new ObjectParameter("diagramname", typeof(string));
var owner_idParameter = owner_id.HasValue ?
new ObjectParameter("owner_id", owner_id) :
new ObjectParameter("owner_id", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_dropdiagram", diagramnameParameter, owner_idParameter);
}
public virtual ObjectResult<sp_helpdiagramdefinition_Result> sp_helpdiagramdefinition(string diagramname, Nullable<int> owner_id)
{
var diagramnameParameter = diagramname != null ?
new ObjectParameter("diagramname", diagramname) :
new ObjectParameter("diagramname", typeof(string));
var owner_idParameter = owner_id.HasValue ?
new ObjectParameter("owner_id", owner_id) :
new ObjectParameter("owner_id", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<sp_helpdiagramdefinition_Result>("sp_helpdiagramdefinition", diagramnameParameter, owner_idParameter);
}
public virtual ObjectResult<sp_helpdiagrams_Result> sp_helpdiagrams(string diagramname, Nullable<int> owner_id)
{
var diagramnameParameter = diagramname != null ?
new ObjectParameter("diagramname", diagramname) :
new ObjectParameter("diagramname", typeof(string));
var owner_idParameter = owner_id.HasValue ?
new ObjectParameter("owner_id", owner_id) :
new ObjectParameter("owner_id", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<sp_helpdiagrams_Result>("sp_helpdiagrams", diagramnameParameter, owner_idParameter);
}
public virtual int sp_renamediagram(string diagramname, Nullable<int> owner_id, string new_diagramname)
{
var diagramnameParameter = diagramname != null ?
new ObjectParameter("diagramname", diagramname) :
new ObjectParameter("diagramname", typeof(string));
var owner_idParameter = owner_id.HasValue ?
new ObjectParameter("owner_id", owner_id) :
new ObjectParameter("owner_id", typeof(int));
var new_diagramnameParameter = new_diagramname != null ?
new ObjectParameter("new_diagramname", new_diagramname) :
new ObjectParameter("new_diagramname", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_renamediagram", diagramnameParameter, owner_idParameter, new_diagramnameParameter);
}
public virtual int sp_upgraddiagrams()
{
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_upgraddiagrams");
}
public virtual ObjectResult<Ten_Most_Expensive_Products_Result> Ten_Most_Expensive_Products()
{
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Ten_Most_Expensive_Products_Result>("Ten_Most_Expensive_Products");
}public override int SaveChanges()
{
return base.SaveChanges();
}
}
}using System;
namespace Repository_Database
{
public interface INorthwind_DBEntities
{
System.Data.Entity.DbSet<Alphabetical_list_of_product> Alphabetical_list_of_products { get; set; }
System.Data.Entity.DbSet<Category> Categories { get; set; }
System.Data.Entity.DbSet<Category_Sales_for_1997> Category_Sales_for_1997 { get; set; }
System.Data.Entity.DbSet<Current_Product_List> Current_Product_Lists { get; set; }
System.Data.Entity.DbSet<Customer_and_Suppliers_by_City> Customer_and_Suppliers_by_Cities { get; set; }
System.Data.Entity.DbSet<CustomerDemographic> CustomerDemographics { get; set; }
System.Data.Entity.DbSet<Customer> Customers { get; set; }
System.Data.Entity.Core.Objects.ObjectResult<CustOrderHist_Result> CustOrderHist(string customerID);
System.Data.Entity.Core.Objects.ObjectResult<CustOrdersDetail_Result> CustOrdersDetail(int? orderID);
System.Data.Entity.Core.Objects.ObjectResult<CustOrdersOrders_Result> CustOrdersOrders(string customerID);
System.Data.Entity.Core.Objects.ObjectResult<Employee_Sales_by_Country_Result> Employee_Sales_by_Country(DateTime? beginning_Date, DateTime? ending_Date);
System.Data.Entity.DbSet<Employee> Employees { get; set; }
System.Data.Entity.DbSet<Invoice> Invoices { get; set; }
System.Data.Entity.DbSet<Order_Detail> Order_Details { get; set; }
System.Data.Entity.DbSet<Order_Details_Extended> Order_Details_Extendeds { get; set; }
System.Data.Entity.DbSet<Order_Subtotal> Order_Subtotals { get; set; }
System.Data.Entity.DbSet<Order> Orders { get; set; }
System.Data.Entity.DbSet<Orders_Qry> Orders_Qries { get; set; }
System.Data.Entity.DbSet<Product_Sales_for_1997> Product_Sales_for_1997 { get; set; }
System.Data.Entity.DbSet<Product> Products { get; set; }
System.Data.Entity.DbSet<Products_Above_Average_Price> Products_Above_Average_Prices { get; set; }
System.Data.Entity.DbSet<Products_by_Category> Products_by_Categories { get; set; }
System.Data.Entity.DbSet<Region> Regions { get; set; }
System.Data.Entity.DbSet<Sales_by_Category> Sales_by_Categories { get; set; }
System.Data.Entity.Core.Objects.ObjectResult<Sales_by_Year_Result> Sales_by_Year(DateTime? beginning_Date, DateTime? ending_Date);
System.Data.Entity.DbSet<Sales_Totals_by_Amount> Sales_Totals_by_Amounts { get; set; }
System.Data.Entity.Core.Objects.ObjectResult<SalesByCategory_Result> SalesByCategory(string categoryName, string ordYear);
int SaveChanges();
System.Data.Entity.DbSet<Shipper> Shippers { get; set; }
int sp_alterdiagram(string diagramname, int? owner_id, int? version, byte[] definition);
int sp_creatediagram(string diagramname, int? owner_id, int? version, byte[] definition);
int sp_dropdiagram(string diagramname, int? owner_id);
System.Data.Entity.Core.Objects.ObjectResult<sp_helpdiagramdefinition_Result> sp_helpdiagramdefinition(string diagramname, int? owner_id);
System.Data.Entity.Core.Objects.ObjectResult<sp_helpdiagrams_Result> sp_helpdiagrams(string diagramname, int? owner_id);
int sp_renamediagram(string diagramname, int? owner_id, string new_diagramname);
int sp_upgraddiagrams();
System.Data.Entity.DbSet<Summary_of_Sales_by_Quarter> Summary_of_Sales_by_Quarters { get; set; }
System.Data.Entity.DbSet<Summary_of_Sales_by_Year> Summary_of_Sales_by_Years { get; set; }
System.Data.Entity.DbSet<Supplier> Suppliers { get; set; }
System.Data.Entity.DbSet<sysdiagram> sysdiagrams { get; set; }
System.Data.Entity.Core.Objects.ObjectResult<Ten_Most_Expensive_Products_Result> Ten_Most_Expensive_Products();
System.Data.Entity.DbSet<Territory> Territories { get; set; }
}
}but when update model from DB i have again add interface to Model so how i reduce this manually work.
and Unit of work also
Thanks
Dharmesh
Thursday, September 6, 2018 7:11 PM
All replies
-
User475983607 posted
Look into using T4 templates for code generation as that's what DB first uses.
Or simply use Code First. Scaffold to the DB as shown in the reference docs then use migrations from that point on.
https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/workflows/existing-database
Thursday, September 6, 2018 7:22 PM -
User1120430333 posted
I use the DAO pattern with EF DB first with DI using Unity IoC and WebAPI controller.
https://www.tutorialspoint.com/design_pattern/data_access_object_pattern.htm
Imports System.Web.Http Imports DAL Imports Entities Namespace Controllers <CustomExceptionFilter> Public Class TaskController Inherits ApiController Private ReadOnly _daotask As IDaoTask public sub New (daotask As IDaoTask) _daotask = daotask End sub <HttpGet> <ActionName("GetTaskById")> public Function GetTaskById(ByVal id As int32) as DtoTask return _daotask.GetTaskById(id) End Function <HttpGet> <ActionName("GetTasksByProjectId")> public Function GetTasksByProjectId(byval id as int32) as List(Of DtoTask) return _daotask.GetTasksByProjectId(id) End Function <HttpPost> <ActionName("CreateTask")> public sub CreateTask(ByVal dto As DtoTask) Call _daotask.CreateTask(dto) End sub <HttpPost> <ActionName("UpdateTask")> public sub UpdateTask(ByVal dto As DtoTask) Call _daotask.UpdateTask(dto) End sub <HttpPost> <ActionName("DeleteTask")> public sub DeleteTask(byval dto As DtoId) Call _daotask.DeleteTask(dto.Id) End sub End Class End Namespace
Imports Entities Public Interface IDaoTask Function GetTaskById(ByVal id As int32) As DtoTask Function GetTasksByProjectId(byval id as int32) As List(Of DtoTask) sub CreateTask(ByVal dto As DtoTask) sub UpdateTask(byval dto As DtoTask) sub DeleteTask(ByVal id As Int32) End Interface ==================================================================== Imports System.Data.Entity Imports Entities Public Class DaoTask Implements IDaoTask public Function GetTaskById(ByVal id As int32) As DtoTask Implements IDaoTask.GetTaskById Dim dto = new DtoTask() Using context As New ProjectManagementEntities Dim task = (context.Tasks.Where(Function(a) a.TaskId = id)).SingleOrDefault() If IsNothing(task) Then Return dto End If dto.TaskId = task.TaskId dto.TaskName = task.TaskName dto.Note = task.Note dto.StartDate = task.StartDate dto.EndDate = task.EndDate dto.ResourceId = task.ResourceId dto.ProjectId = task.ProjectId dto.TaskDuration = task.TaskDuration dto.TaskSpent = task.TaskSpent dto.Status = task.Status End Using Return dto End Function public Function GetTasksByProjectId(byval id as int32) As List(Of DtoTask) Implements IDaoTask.GetTasksByProjectId Dim dtos = new List(Of DtoTask) Using context As New ProjectManagementEntities dim tasks = (from a in context.Tasks.Where(Function(a) a.ProjectId = id) select a).ToList() for each task As Task In tasks Dim dto = New DtoTask() With{.TaskId = task.TaskId, .TaskName = task.TaskName, .Note = task.Note, .StartDate = task.StartDate, .EndDate = task.EndDate, .ResourceId = task.ResourceId, .ProjectId = task.ProjectId,
.TaskDuration = task.TaskDuration, .TaskSpent = task.TaskSpent, . Status = task.Status} dtos.Add(dto) Next End Using Return dtos End Function public sub CreateTask(ByVal dto As DtoTask) Implements IDaoTask.CreateTask Using context As New ProjectManagementEntities Dim task as New Task() With {.TaskId = dto.TaskId, .TaskName = dto.TaskName, .Note = dto.Note, .StartDate = dto.StartDate, .EndDate = dto.EndDate, .ResourceId = dto.ResourceId, .ProjectId = dto.ProjectId, .TaskDuration = dto.TaskDuration, .TaskSpent = dto.TaskSpent, .Status = dto.Status} context.Tasks.Add(task) context.SaveChanges() End Using End sub public sub UpdateTask(byval dto As DtoTask) Implements IDaoTask.UpdateTask Dim task = new Task() Using context As New ProjectManagementEntities task = (context.Tasks.Where(Function(a) a.TaskId = dto.TaskId)).SingleOrDefault() If Not IsNothing(task) Then task.TaskId = dto.TaskId task.TaskName = dto.TaskName task.Note = dto.Note task.StartDate = dto.StartDate task.EndDate = dto.EndDate task.ResourceId = dto.ResourceId task.ProjectId = dto.ProjectId task.TaskDuration = dto.TaskDuration task.TaskSpent = dto.TaskSpent task.Status = dto.Status End If End Using Using dbcontext As New ProjectManagementEntities If IsNothing(task) Then Exit Sub End If dbcontext.Entry(task).State = EntityState.Modified dbcontext.SaveChanges() End Using End sub public sub DeleteTask(ByVal id As Int32) Implements IDaoTask.DeleteTask Dim task As Task Using context As New ProjectManagementEntities task = (context.Tasks.Where(Function(a)a.TaskId = id)).SingleOrDefault() End Using Using newContext As New ProjectManagementEntities newContext.Entry(task).State = EntityState.Deleted newContext.SaveChanges() End Using End Sub End ClassImports System.Web.Http Imports Unity Imports DAL Public Module WebApiConfig Public Sub Register(ByVal config As HttpConfiguration) ' Web API configuration and services dim container = new UnityContainer() container.RegisterType(Of IDaoProject, DaoProject) () container.RegisterType(Of IDaoTask, DaoTask) () container.RegisterType(Of IDaoCache, DaoCache) () config.DependencyResolver = new UnityResolver(container) ' Web API routes config.MapHttpAttributeRoutes() config.Routes.MapHttpRoute( name:="DefaultApi", routeTemplate:="api/{controller}/{action}/{id}", defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} ) End Sub End Module
Friday, September 7, 2018 2:12 AM -
User-171003712 posted
Dear DA924,
As already in my post if We are using any IoC , in my case like Autofac then why we create object of DBCONTEXT as in your post. I dont want to create object so this object is handle Autofac and register with Context with IdbContext
Using context As New ProjectManagementEntities
My Code Sample to handle
var builder = new ContainerBuilder(); builder.RegisterType<B2CEntities>().As<IDbContext>().InstancePerLifetimeScope();
so there is my one problem arise here i have to handle IDbContext and inherit every time when my model is update.
Thanks
DharmeshSaturday, September 8, 2018 4:35 AM -
User1120430333 posted
Dear DA924,
As already in my post if We are using any IoC , in my case like Autofac then why we create object of DBCONTEXT as in your post. I dont want to create object so this object is handle Autofac and register with Context with IdbContext
Using context As New ProjectManagementEntities
My Code Sample to handle
var builder = new ContainerBuilder(); builder.RegisterType<B2CEntities>().As<IDbContext>().InstancePerLifetimeScope();
so there is my one problem arise here i have to handle IDbContext and inherit every time when my model is update.
Thanks
DharmeshNow, Dbcontext is being DI-ed into the DaoProject object using Unity IoC and EF DB first.
Imports System.Data.Entity Imports System.Web.Http Imports Unity Imports DAL Imports Unity.Lifetime Public Module WebApiConfig Public Sub Register(ByVal config As HttpConfiguration) ' Web API configuration and services dim container = new UnityContainer() container.RegisterType(Of IDaoProject, DaoProject) () container.RegisterType(Of IDaoTask, DaoTask) () container.RegisterType(Of IDaoCache, DaoCache) () container.RegisterType(Of DbContext, ProjectManagementEntities)(new HierarchicalLifetimeManager()) config.DependencyResolver = new UnityResolver(container) ' Web API routes config.MapHttpAttributeRoutes() config.Routes.MapHttpRoute( name:="DefaultApi", routeTemplate:="api/{controller}/{action}/{id}", defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} ) End Sub End Module
Imports System.Data.Entity Imports Entities Public Class DaoProject Implements IDaoProject Private ReadOnly context As ProjectManagementEntities public sub New (dbcontext As ProjectManagementEntities) context = dbcontext End sub Public Function GetProjectById(ByVal id As Int32) As DtoProject Implements IDaoProject.GetProjectById Dim dto = New DtoProject() Dim project = (context.Projects.Where(Function(a) a.ProjectId = id)).SingleOrDefault() If IsNothing(project) Then Return dto End If dto.ProjectId = project.ProjectId dto.ClientName = project.ClientName dto.ProjectName = project.ProjectName dto.Technology = project.Technology dto.ProjectType = project.ProjectType dto.UserId = project.UserId dto.StartDate = project.StartDate dto.EndDate = project.EndDate dto.Cost = project.Cost Return dto End Function Public Function GetProjectsByUserId(ByVal userid As String) As List(Of DtoProject) Implements IDaoProject.GetProjectsByUserId Dim dtos = New List(Of DtoProject) dtos = (From a In context.Projects.Where(Function(a) a.UserId.Contains(userid)) Select New DtoProject With {.ProjectId = a.ProjectId, .ClientName = a.ClientName, .ProjectName = a.ProjectName, .Technology = a.Technology, .ProjectType = a.ProjectType, .UserId = a.UserId, .StartDate = a.StartDate, .EndDate = a.EndDate, .Cost = a.Cost}).ToList() Return dtos End Function Public Sub CreateProject(ByVal dto As DtoProject) Implements IDaoProject.CreateProject Dim project = New Project() With {.ClientName = dto.ClientName, .ProjectName = dto.ProjectName, .Technology = dto.Technology, .ProjectType = dto.ProjectType, .UserId = dto.UserId, .StartDate = dto.StartDate, .EndDate = dto.EndDate, .Cost = dto.Cost} context.Projects.Add(project) context.SaveChanges() End Sub Public Sub UpdateProject(ByVal dto As DtoProject) Implements IDaoProject.UpdateProject Dim project = New Project() project = (context.Projects.Where(Function(a) a.ProjectId = dto.ProjectId)).SingleOrDefault() If Not IsNothing(project) Then project.ClientName = dto.ClientName project.ProjectName = dto.ProjectName project.Technology = dto.Technology project.ProjectType = dto.ProjectType project.UserId = dto.UserId project.StartDate = dto.StartDate project.EndDate = dto.EndDate project.Cost = dto.Cost End If If IsNothing(project) Then Exit Sub End If context.Entry(project).State = EntityState.Modified context.SaveChanges() End Sub Public Sub DeleteProject(ByVal id As Int32) Implements IDaoProject.DeleteProject Dim project As Project project = (context.Projects.Where(Function(a) a.ProjectId = id)).Include("Tasks").SingleOrDefault() If IsNothing(project) Then Exit Sub End If For i As Integer = 0 To project.Tasks.Count - 1 Dim task = project.Tasks(i) context.Entry(task).State = EntityState.Deleted Next context.Entry(project).State = EntityState.Deleted context.SaveChanges() End Sub End Class
Saturday, September 8, 2018 3:47 PM -
User-171003712 posted
Dear DA924,
Your code working fine. but you removed Interface and add used as direclty used and inject in the repository .
which is not solve my problem to remove Interface.
using System; namespace Repository_Database { public interface INorthwind_DBEntities { System.Data.Entity.DbSet<Alphabetical_list_of_product> Alphabetical_list_of_products { get; set; } System.Data.Entity.DbSet<Category> Categories { get; set; } System.Data.Entity.DbSet<Category_Sales_for_1997> Category_Sales_for_1997 { get; set; } System.Data.Entity.DbSet<Current_Product_List> Current_Product_Lists { get; set; } System.Data.Entity.DbSet<Customer_and_Suppliers_by_City> Customer_and_Suppliers_by_Cities { get; set; } System.Data.Entity.DbSet<CustomerDemographic> CustomerDemographics { get; set; } System.Data.Entity.DbSet<Customer> Customers { get; set; } System.Data.Entity.Core.Objects.ObjectResult<CustOrderHist_Result> CustOrderHist(string customerID); System.Data.Entity.Core.Objects.ObjectResult<CustOrdersDetail_Result> CustOrdersDetail(int? orderID); System.Data.Entity.Core.Objects.ObjectResult<CustOrdersOrders_Result> CustOrdersOrders(string customerID); System.Data.Entity.Core.Objects.ObjectResult<Employee_Sales_by_Country_Result> Employee_Sales_by_Country(DateTime? beginning_Date, DateTime? ending_Date); System.Data.Entity.DbSet<Employee> Employees { get; set; } System.Data.Entity.DbSet<Invoice> Invoices { get; set; } System.Data.Entity.DbSet<Order_Detail> Order_Details { get; set; } System.Data.Entity.DbSet<Order_Details_Extended> Order_Details_Extendeds { get; set; } System.Data.Entity.DbSet<Order_Subtotal> Order_Subtotals { get; set; } System.Data.Entity.DbSet<Order> Orders { get; set; } System.Data.Entity.DbSet<Orders_Qry> Orders_Qries { get; set; } System.Data.Entity.DbSet<Product_Sales_for_1997> Product_Sales_for_1997 { get; set; } System.Data.Entity.DbSet<Product> Products { get; set; } System.Data.Entity.DbSet<Products_Above_Average_Price> Products_Above_Average_Prices { get; set; } System.Data.Entity.DbSet<Products_by_Category> Products_by_Categories { get; set; } System.Data.Entity.DbSet<Region> Regions { get; set; } System.Data.Entity.DbSet<Sales_by_Category> Sales_by_Categories { get; set; } System.Data.Entity.Core.Objects.ObjectResult<Sales_by_Year_Result> Sales_by_Year(DateTime? beginning_Date, DateTime? ending_Date); System.Data.Entity.DbSet<Sales_Totals_by_Amount> Sales_Totals_by_Amounts { get; set; } System.Data.Entity.Core.Objects.ObjectResult<SalesByCategory_Result> SalesByCategory(string categoryName, string ordYear); int SaveChanges(); System.Data.Entity.DbSet<Shipper> Shippers { get; set; } int sp_alterdiagram(string diagramname, int? owner_id, int? version, byte[] definition); int sp_creatediagram(string diagramname, int? owner_id, int? version, byte[] definition); int sp_dropdiagram(string diagramname, int? owner_id); System.Data.Entity.Core.Objects.ObjectResult<sp_helpdiagramdefinition_Result> sp_helpdiagramdefinition(string diagramname, int? owner_id); System.Data.Entity.Core.Objects.ObjectResult<sp_helpdiagrams_Result> sp_helpdiagrams(string diagramname, int? owner_id); int sp_renamediagram(string diagramname, int? owner_id, string new_diagramname); int sp_upgraddiagrams(); System.Data.Entity.DbSet<Summary_of_Sales_by_Quarter> Summary_of_Sales_by_Quarters { get; set; } System.Data.Entity.DbSet<Summary_of_Sales_by_Year> Summary_of_Sales_by_Years { get; set; } System.Data.Entity.DbSet<Supplier> Suppliers { get; set; } System.Data.Entity.DbSet<sysdiagram> sysdiagrams { get; set; } System.Data.Entity.Core.Objects.ObjectResult<Ten_Most_Expensive_Products_Result> Ten_Most_Expensive_Products(); System.Data.Entity.DbSet<Territory> Territories { get; set; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Repository_Database; namespace RepositoryPattern_RepoInterfaces { public interface ICustomerRepository { IEnumerable<Customer> SelectAll(); Customer SelectByID(string id); void Insert(Customer obj); void Delete(string id); void Save(); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.Entity; using RepositoryPattern_RepoInterfaces; using Repository_Database; namespace RepositoryPattern_RepoClasses { public class CustomerRepository : ICustomerRepository { INorthwind_DBEntities NorthwindContext; public CustomerRepository(INorthwind_DBEntities db) { NorthwindContext = db; } public IEnumerable<Customer> SelectAll() { return NorthwindContext.Customers.ToList(); } public Customer SelectByID(string id) { return NorthwindContext.Customers.Find(id); } public void Insert(Customer obj) { NorthwindContext.Customers.Add(obj); } public void Delete(string id) { var value = NorthwindContext.Customers.Where(i => i.CustomerID == id).FirstOrDefault(); NorthwindContext.Customers.Remove(value); } public void Save() { NorthwindContext.SaveChanges(); } } }
using Autofac; using Autofac.Integration.Mvc; using Repository_Database; using RepositoryPattern.Controllers; using RepositoryPattern_RepoClasses; using RepositoryPattern_RepoInterfaces; using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; using System.Web.Mvc; namespace RepositoryPattern.App_Start { public static class AutofacConfig { public static void RegisterComponents() { var builder = new ContainerBuilder(); builder.RegisterType<CustomerRepository>().As<ICustomerRepository>(); builder.RegisterType<CustomerController>(); builder.RegisterType<Northwind_DBEntities>().As<INorthwind_DBEntities>(); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } } }
so problem is present. may be another solution .
but this is not a accepted answer.
Thanks DA924
Saturday, September 8, 2018 4:35 PM -
User1120430333 posted
Your code working fine. but you removed Interface and add used as direclty used and inject in the repository .
which is not solve my problem to remove Interface.There is no interface being used for Dbcontext with EF6 DB first that I am using. I just told Unity to associate the Dbcontext to ProjectManagementEntities, becuase after all, ProjectManagementEntities is derived from DBContext.
All I did was looked at what Unity was doing for Dbcontext for the Identity EF code first usage of Identity up at the MVC5 presentation layer and moved it to the Unity that is being used in the WebAPI that is using Unity, where EF6 DB first Dbcontext is being used, saying to myself "is this going to work?", and it worked! :)
All IoC(s) are not created equal. I found that out the hard way when I discovered Ninject couldn't do the DI needed for using ASP.NET Identity in making it work with the MVC controllers that were using Identity for MVC5, becuase all the other controllers were using DI and Unity.
Maybe, you should switch to Unity, becuase what you are showing me if you are using EF6 DB first with Dbcontext, I am sure as heck not doing all of that nor do I have any code that looks like what you are showing.
Imports System.Data.Entity Imports Microsoft.AspNet.Identity Imports Microsoft.AspNet.Identity.EntityFramework Imports ProgMgmntVB.Controllers Imports ProgMgmntVB.Models Imports ProgMgmntVB.WebApi Imports Unity Imports Unity.Injection Imports Unity.Lifetime Imports Unity.Mvc5 Module ModuleUnity public class UnityConfig public shared sub RegisterComponents() dim container = new UnityContainer() container.RegisterType(Of IProjectModel, ProjectModel)() container.RegisterType(Of ITaskModel, TaskModel)() container.RegisterType(Of IWebApi, WebApi.WebApi)() container.RegisterType(Of IModelHelper, ModelHelper)() 'Idenity container.RegisterType(Of DbContext, ApplicationDbContext)(new HierarchicalLifetimeManager()) container.RegisterType(of UserManager(of ApplicationUser))(new HierarchicalLifetimeManager()) container.RegisterType(of IUserStore(of ApplicationUser), UserStore(of ApplicationUser))(New HierarchicalLifetimeManager()) container.RegisterType(of AccountController)(new InjectionConstructor()) DependencyResolver.SetResolver(new UnityDependencyResolver(container)) End sub End Class End Module
using System.Data; using System.Data.Common; using System.Web; using System.Web.Mvc; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Owin.Security; using Microsoft.Practices.Unity; using Unity.Mvc5; using ServiceLayer; using WebAPI.Controllers; using MVC.Models; namespace MVC.App_Start { public static class IocExtensions { public static void BindInRequestScope<T1, T2>(this IUnityContainer container) where T2 : T1 { container.RegisterType<T1, T2>(new HierarchicalLifetimeManager()); } public static void BindInSingletonScope<T1, T2>(this IUnityContainer container) where T2 : T1 { container.RegisterType<T1, T2>(new ContainerControlledLifetimeManager()); } } public class UnityMVC5 { public static void Start() { var container = BuildUnityContainer(); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); } private static IUnityContainer BuildUnityContainer() { var container = new UnityContainer(); //Models container.BindInRequestScope<IStudentModels, StudentModels>(); container.BindInRequestScope<IEnrollmentModels, EnrollmentModels>(); //SeviceLayer container.BindInRequestScope<IServiceA, ServiceA>(); //WebAPI controllers container.BindInRequestScope<IStudentControllerAPI, StudentController>(); container.BindInRequestScope<IEnrollmentControllerAPI, EnrollmentController>(); //asp.net idenity container.RegisterType<ApplicationDbContext>(); container.RegisterType<ApplicationSignInManager>(); container.RegisterType<ApplicationUserManager>(); container.RegisterType<IAuthenticationManager>( new InjectionFactory(c => HttpContext.Current.GetOwinContext().Authentication)); container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>( new InjectionConstructor(typeof(ApplicationDbContext))); return container; } } }
Saturday, September 8, 2018 7:03 PM