Table of Contents [Hide/Show]
Data Layer: Why a separate layer for the data access? Architecture Example: Supported Databases: What is a DataRepository? How does the DataRepository know which provider to use? What are access methods? Read Methods: Write Methods: Custom Enterprise Library Data Access: Custom Stored Procedures: Discovery User Defined Custom Procedure Naming Convention: Validating Data Returned from Custom Stored Procedures. Advanced Topics: Dynamic Connection String Multiple NetTiers Service Sections How can I dynamically create a NetTiersProvider at runtime without having to use the configuration? How can I set a another provider as the default provider at runtime?
1 DataRepository.OrdersProvider.GetAll(); 2 DataRepository.OrdersProvider.GetByOrderDate(DateTime.Today); 3 DataRepository.OrdersProvider.Insert(transactionManager, order);
1 string sqlCommand = "GetEmployeeName"; 2 // Retrieve EmployeeName ExecuteScalar returns an object, so 3 // we cast to the correct type (string). 4 string employeeName = (string)DataRepository.Provider.ExecuteScalar(CommandType.StoredProcedure, sqlCommand);
1 CustomersParameterBuilder query1 = new CustomersParameterBuilder(); 2 query1.Append(CustomersColumn.CustomerID, "A%"); 3 query1.Append(CustomersColumn.City, "London, Berlin"); 4 5 TList<Customers> list1 = DataRepository.CustomersProvider.Find(query1.GetParameters()); 6 Console.WriteLine("Query1 = {0}", query1); 7 Console.WriteLine("Count1 = {0}", list1.Count);
1(CustomerID LIKE @Param0) AND (City = @Param1 OR City = @Param2) 2-- Count1 = 2
1 CustomersParameterBuilder query1 = new CustomersParameterBuilder(); 2 query1.Clear(); 3 query1.Junction = string.Empty; // This prevents the ParameterBuilder from throwing an "AND" before next line's output 4 query1.BeginGroup(); 5 query1.Append(string.Empty, CustomersColumn.CustomerID, "A%", true); 6 query1.Append("AND", CustomersColumn.City, "London", true); 7 query1.EndGroup(); 8 query1.BeginGroup("OR"); 9 query1.Append(string.Empty, CustomersColumn.CustomerID, "B%", true); 10 query1.Append("AND", CustomersColumn.City, "Berlin", true); 11 query1.EndGroup(); 12 13 TList<Customers> list1 = DataRepository.CustomersProvider.Find(query1.GetParameters()); 14 Console.WriteLine("Query1 = {0}", query1);
1(CustomerID LIKE @Param0 AND City = @Param1) OR (CustomerID LIKE @Param2 AND City = @Param3)
1 internal virtual void EnsureGroups() 2 ...{ 3 while (_groupCount > 0) 4 ...{ 5 EndGroup(); 6 } 7 }
1 internal virtual void EnsureGroups() 2 ...{ 3 // while (_groupCount > 0) 4 // { 5 // EndGroup(); 6 // } 7 }
1 CustomersFilterBuilder query2 = new CustomersFilterBuilder(); 2 query2.Append(CustomersColumn.CustomerID, "A*"); 3 query2.Append(CustomersColumn.City, "London, Berlin"); 4 int count = 0; 5 TList<Customers> list2 = DataRepository.CustomersProvider.GetPaged( 6 query2.ToString(), null, 0, 100, out count); 7 8 Console.WriteLine("Query2 = {0}", query2); 9 Console.WriteLine("Count2 = {0}", list2.Count);
1Query2 = (CustomerID LIKE 'A%') AND (City = 'London' OR City = 'Berlin') 2--Count2 = 2
1create procedure _Employee_GetByBirthdate @birthDate dateTime As 2Select * from Employee where birthDate = @birthdate GO
1 DateTime today = DateTime.Today; 2 TList<Employee> todaysBirthdayList = DataRepository.EmployeeProvider.GetByBirthdate(today);
1DataRepository.AddConnection("Vendor1DynamicCS", "Data Source=(local);Initial Catalog=Vendor1Northwind;Integrated Security=true;"); 2 3TList<Info> list = DataRepository.Connections["Vendor1DynamicCS"].Provider.InfoProvider.GetAll()
1 <configSections> 2 <section name="Orders.Data" 3 type="Orders.Data.Bases.NetTiersServiceSection, Orders.Data" 4 allowDefinition="MachineToApplication" 5 restartOnExternalChanges="true" /> 6 7 <section name="Inventory.Data" 8 type="Inventory.Data.Bases.NetTiersServiceSection, Inventory.Data" 9 allowDefinition="MachineToApplication" 10 restartOnExternalChanges="true" /> 11 12 </configSections> 13 14 <connectionStrings> 15 <add name="connectionStringOrders" 16 connectionString="database=Orders;Integrated Security=true;Connection Timeout=1;server=.;" /> 17 18 <add name="connectionStringInventory" 19 connectionString="database=Inventory;Integrated Security=true;Connection Timeout=1;server=.;" /> 20 21 </connectionStrings> 22 23 <Orders.Data defaultProvider="SqlNetTiersProvider"> 24 <providers> 25 <add name="SqlNetTiersProvider" 26 type="Orders.Data.SqlClient.SqlNetTiersProvider, Orders.Data.SqlClient" 27 connectionStringName="connectionStringOrders" 28 useStoredProcedure="false" 29 providerInvariantName="System.Data.SqlClient" /> 30 </providers> 31 </Orders.Data> 32 33 <Inventory.Data defaultProvider="SqlNetTiersProvider2"> 34 <providers> 35 <add name="SqlNetTiersProvider2" 36 type="Inventory.Data.SqlClient.SqlNetTiersProvider, Inventory.Data.SqlClient" 37 connectionStringName="connectionStringInventory" 38 useStoredProcedure="false" 39 providerInvariantName="System.Data.SqlClient" /> 40 </providers> 41 </Inventory.Data>
1 SqlNetTiersProvider provider = new SqlNetTiersProvider(); 2 NameValueCollection collection = new NameValueCollection(); 3 collection.Add("UseStoredProcedure", "false"); 4 collection.Add("EnableEntityTracking", "true"); 5 collection.Add("EntityCreationalFactoryType", "Northwind.Entities.EntityFactory"); 6 collection.Add("EnableMethodAuthorization", "false"); 7 collection.Add("ConnectionString", "server=.\\Sql2000;database=Northwind;Integrated Security=true;"); 8 collection.Add("ConnectionStringName", "MyDynamicConnectionString"); 9 collection.Add("ProviderInvariantName", "System.Data.SqlClient"); 10 11 provider.Initialize("DynamicSqlNetTiersProvider", collection); 12 13 DataRepository.LoadProvider(provider, true); 14 15 TList<Orders> list = DataRepository.OrdersProvider.GetAll(); 16 Response.Write(list.Count.ToString());
1 NetTiersProvider provider = DataRepository.Providers["MyDynamicProvider"]; 2 DataRepository.LoadProvider(provider, true);