Using Custom Data Access Classes

If you are using custom data access classes with your business objects (for example, your Inventory business object uses an InventoryDataAccess class), how can you tell your remote WCF service to instantiate this custom data access class? This involves three steps:

  1. In your business object's CreateDataAccessObject() method, pass the name of your custom data access class as a string to the constructor of the WCF service data access class.

    For example, in C#:

    protected override mmDataAccessBase CreateDataAccessObject(string dataAccessClassName)
    {
    	if (mmAppBase.DefaultDataAccessMode == mmDataAccessMode.Local)
    	{
    		return new InventoryDataAccess();
    	}
    	else
    	{
    		WSHttpBinding binding = new WSHttpBinding();
    		binding.MaxReceivedMessageSize = 147483647;
    		EndpointAddress address = new EndpointAddress("http://kjm9300/WCF Data Service Template/Service.svc/mex");
    		return new mmDataAccessWCFSql(binding, address, "InventoryDataAccess");
    	}
    }

    And in VB .NET:

    Protected Overrides Function CreateDataAccessObject(dataAccessClassName As String) As mmDataAccessBase
       If mmAppBase.DefaultDataAccessMode = mmDataAccessMode.Local Then
          Return New InventoryDataAccess()
       Else
    	Dim binding As New WSHttpBinding()
    	binding.MaxReceivedMessageSize = 147483647
    	Dim address As New EndpointAddress("http://kjm9300/WCFService/Service.svc/mex")
    	Return New mmDataAccessWCFSql(binding, address, "InventoryDataAccess")
       End If
    End Function

    At run time, this passes the name of the data access object to be instantiated to your WCF Service.

  2. In your WCF Service, you need to change your Factory.cs or Factory.vb code to check for the token you are passing and instantiate the corresponding data access class.

    For example, in C#:

    public class Factory : OakLeaf.MM.Main.Patterns.mmFactory
    {
    	public override mmDataAccessBase CreateDataAccessObject(string dataAccessClass)
    	{
    		switch (dataAccessClass)
    		{
    			case "InventoryDataAccess":
    				return new InventoryDataAccess();
    			case "OrdersDataAccess":
    				return new OrdersDataAccess();
    			case "OrderDetailDataAccess":
    				return new OrderDetailDataAccess();
    			default:
    				break;
    		}
    		return base.CreateDataAccessObject(dataAccessClass);
    	}
    }

    And in VB .NET:

    Public Class Factory
       Inherits OakLeaf.MM.Main.Patterns.mmFactory
       
       Public Overrides Function CreateDataAccessObject(dataAccessClass As String) As mmDataAccessBase
          Select Case dataAccessClass
             Case "InventoryDataAccess"
                   Return New InventoryDataAccess()
             Case "OrdersDataAccess"
                   Return New OrdersDataAccess()
             Case "OrderDetailDataAccess"
                   Return New OrderDetailDataAccess()
             Case Else
          End Select
          Return MyBase.CreateDataAccessObject(dataAccessClass)
       End Function
    End Class

  3. Finally, you need to add an assembly to your WCF service that contains the data access classes. You can choose to either reference your entire business object assembly, or you can place your data access classes into a different assembly and reference that assembly instead.

© (c) 2026 Oak Leaf Enterprises, Inc., 1996-2026 • Updated: 09/23/10
Comment or report problem with topic