Generic Dal in WCF using VB.NET

In this article I would just give a tip on how to improve on the Generic DAL which we just finished in this Series . I already posted the C# code of the Service Layer.

To see: http://www.c-sharpcorner.com/Authors/Mahadesh/mahadesh-mahalingappa.aspx

For Visual Basic Guys I am doing it now .

Though the Generic DAl which we had designed worked well. We still were not able to create a 100% Generic Solution in the previous article . Inorder to achieve a 100% Generic Method , We need to take the Help of Reflection . We would need to call the method CreateObjectSet using Reflection .

This is how the Service Layer needs to be modified .

Imports GenericDAL
Imports
 System.Data.Objects
Imports
 System.Reflection

' NOTE: You can use the "Rename" command on the context menu to change the class name "Service1" in code, svc and config file together.

Public Class Service1
    Implements 
IService1
     Public Function [Get](ByVal entity As TEntityAs TEntity Implements IService1.Get
        Dim x1 As IEnumerable(Of TEntity) = GetObjectSet(entity)
        Return x1.First()
   End 
Function

     Public Function GetObjectSet(ByVal entity As TEntityAs Object
        Dim context As New MCSEntities()
        Dim typeArgs As Type() = {ObjectContext.GetObjectType(entity.[GetType]())}
        Dim typObjectContext As Type = context.[GetType]()
        Dim NoParams As Type() = {}
        Dim meth As MethodInfo = typObjectContext.GetMethod("CreateObjectSet", NoParams)
        Dim methGeneric As MethodInfo = meth.MakeGenericMethod(typeArgs)

  
        Return methGeneric.Invoke(context, Nothing)
    End 
Function

End
 Class 
 

The Service Contract Looks as below :
 

Imports GenericDAL
<ServiceContract()>

Public
 Interface IService1  
    <OperationContract()> _
    Function [Get](ByVal entity As TEntityAs 
TEntity

End
 Interface  
The TEntity Class looks as below :

Imports
 System.Runtime.Serialization
Imports
 System.Data.Objects.DataClasses
<KnownType(GetType(MCS_CR_Company))> _
<KnownType(GetType(MCS_CR_Product))> _
<Serializable()> _
<DataContractAttribute(IsReference:=True)> _

Public
 Class TEntity
    Inherits 
EntityObject

End
 Class

Client Code :

Imports Client.DataServiceReference
Module
 Module1
  
    Sub Main()
        Dim client As New Service1Client()
  
        Dim entity As TEntity = New Article()
      Dim company As TEntity = client.Get(entity)

  
        Console.ReadKey()
  
    End Sub
End
 Module

I will soon try to post the Entire project . Till then happy Coding .


Similar Articles