Agregar archivos de proyecto.
This commit is contained in:
111
Extensiones/EntityExtensions.vb
Normal file
111
Extensiones/EntityExtensions.vb
Normal file
@@ -0,0 +1,111 @@
|
||||
Imports System.Runtime.CompilerServices
|
||||
Imports System.Data.Objects.DataClasses
|
||||
Imports System.Runtime.Serialization
|
||||
Imports System.IO
|
||||
Imports System.Reflection
|
||||
Imports System.Runtime.Serialization.Formatters.Binary
|
||||
|
||||
Namespace Extensiones
|
||||
Public Module EntityExtensions
|
||||
''' <summary>
|
||||
''' Extension method to Enitity Object.
|
||||
''' Deeply clone the Object.
|
||||
''' </summary>
|
||||
''' <param name="source">Entity Object need to be cloned </param>
|
||||
''' <returns>The cloned object</returns>
|
||||
<Extension()>
|
||||
Public Function Clone(Of T As EntityObject)(ByVal source As T) As T
|
||||
Dim ser As New DataContractSerializer(GetType(T))
|
||||
Using stream As MemoryStream = New MemoryStream
|
||||
ser.WriteObject(stream, source)
|
||||
stream.Seek(0, SeekOrigin.Begin)
|
||||
Return DirectCast(ser.ReadObject(stream), T)
|
||||
End Using
|
||||
End Function
|
||||
<Extension()>
|
||||
Public Function ClearEntityObject(Of T As Class)(ByVal source As T, ByVal bCheckHierarchy As Boolean) As T
|
||||
If (source Is Nothing) Then
|
||||
Throw New Exception("Null Object cannot be cloned")
|
||||
End If
|
||||
Dim tObj As Type = source.GetType
|
||||
If (Not tObj.GetProperty("EntityKey") Is Nothing) Then
|
||||
tObj.GetProperty("EntityKey").SetValue(source, Nothing, Nothing)
|
||||
End If
|
||||
If bCheckHierarchy Then
|
||||
Dim PropertyList As List(Of PropertyInfo) = Enumerable.ToList(Of PropertyInfo)((From a In source.GetType.GetProperties
|
||||
Where a.PropertyType.Name.Equals("ENTITYCOLLECTION`1", StringComparison.OrdinalIgnoreCase)
|
||||
Select a))
|
||||
Dim prop As PropertyInfo
|
||||
For Each prop In PropertyList
|
||||
Dim keys As IEnumerable = DirectCast(tObj.GetProperty(prop.Name).GetValue(source, Nothing), IEnumerable)
|
||||
Dim key As Object
|
||||
For Each key In keys
|
||||
'Dim kk = ((From a In key.GetType.GetProperties
|
||||
'Where (a.PropertyType.Name.Equals("EntityReference`1", StringComparison.OrdinalIgnoreCase))
|
||||
' Select a))
|
||||
|
||||
'Dim ochildprop = (From a In key.[GetType]().GetProperties() Where a.PropertyType.Name = "EntityReference`1").SingleOrDefault()
|
||||
|
||||
Dim childProp As EntityReference = Enumerable.FirstOrDefault(Of PropertyInfo)((From a In key.GetType.GetProperties
|
||||
Where (a.PropertyType.Name.Equals("EntityReference`1", StringComparison.OrdinalIgnoreCase))
|
||||
Select a)).GetValue(key, Nothing)
|
||||
|
||||
ClearEntityObject(childProp, False)
|
||||
ClearEntityObject(key, True)
|
||||
Next
|
||||
Next
|
||||
End If
|
||||
Return source
|
||||
End Function
|
||||
|
||||
|
||||
''' <summary>
|
||||
''' Clear the entity of object and all related child objects
|
||||
''' </summary>
|
||||
''' <param name="source">Entity Object need to be cleared</param>
|
||||
''' <param name="bcheckHierarchy">This parameter is used to determine whether to clear all the child object</param>
|
||||
''' <returns></returns>
|
||||
<Extension()>
|
||||
Public Function ClearEntityReference(ByVal source As EntityObject, ByVal bCheckHierarchy As Boolean) As EntityObject
|
||||
Return ClearEntityObject(source, bCheckHierarchy)
|
||||
End Function
|
||||
|
||||
<Extension>
|
||||
Public Function LoadAllChild(source As EntityObject) As EntityObject
|
||||
Dim PropList As List(Of PropertyInfo) = (From a In source.[GetType]().GetProperties() Where a.PropertyType.Name = "EntityCollection`1").ToList()
|
||||
For Each prop As PropertyInfo In PropList
|
||||
Dim instance As Object = prop.GetValue(source, Nothing)
|
||||
Dim isLoad As Boolean = CBool(instance.[GetType]().GetProperty("IsLoaded").GetValue(instance, Nothing))
|
||||
If Not isLoad Then
|
||||
Dim mi As MethodInfo = (From a In instance.[GetType]().GetMethods() Where a.Name = "Load" AndAlso a.GetParameters().Length = 0).FirstOrDefault()
|
||||
mi.Invoke(instance, Nothing)
|
||||
End If
|
||||
Next
|
||||
Return DirectCast(source, EntityObject)
|
||||
End Function
|
||||
|
||||
<Extension>
|
||||
Public Function DeepClone(Of T As EntityObject)(ByVal source As T) As T
|
||||
Using ms = New MemoryStream()
|
||||
Dim formatter = New BinaryFormatter()
|
||||
formatter.Serialize(ms, source)
|
||||
ms.Position = 0
|
||||
Return DirectCast(formatter.Deserialize(ms), T)
|
||||
End Using
|
||||
End Function
|
||||
'<Extension>
|
||||
'Public Function ToDataTable(Of T As Class)(ByVal Lista As List(Of T)) As DataTable
|
||||
' Dim dt As New DataTable(GetType(T).Name)
|
||||
' Dim props = GetType(T).GetProperties(BindingFlags.Public Or BindingFlags.Instance)
|
||||
' For Each p In props
|
||||
|
||||
' Next
|
||||
'End Function
|
||||
<Extension()>
|
||||
Public Function ObtieneContexto(entity As Objects.DataClasses.EntityObject) As Objects.ObjectContext
|
||||
Dim relationshipManager = DirectCast(entity, Objects.DataClasses.IEntityWithRelationships).RelationshipManager
|
||||
Dim wrappedOwnerProperty = relationshipManager.GetType.GetProperty("WrappedOwner", Reflection.BindingFlags.Instance Or BindingFlags.NonPublic)
|
||||
Return wrappedOwnerProperty.GetValue(relationshipManager).Context
|
||||
End Function
|
||||
End Module
|
||||
End Namespace
|
||||
Reference in New Issue
Block a user