Files
tsEFCore8/ObjetExtensions.vb

72 lines
3.5 KiB
VB.net

Imports System.Runtime.CompilerServices
Imports System.Linq.Expressions
Imports Microsoft.EntityFrameworkCore
Imports System.Data.Entity.Core.Objects
Imports System.Data.Entity.Core
Imports System.Reflection
Imports Microsoft.EntityFrameworkCore.Infrastructure
Imports Newtonsoft.Json
Imports System.Formats
'Imports System.Data.Entity.Core.Objects
'Imports System.Data.Entity.Core.Objects
Namespace Extensiones
Public Module ObjetExtensions
<Extension>
Public Function ObjetoNothingAVacio(ByVal Cadena As Object) As String
If Cadena Is Nothing Then
Return ""
Else
Return Cadena.ToString
End If
End Function
'<Extension>
'Public Function GetDbContextFromEntity(ByVal entity As Object) As Data.Entity.DbContext
' Dim object_context = GetObjectContextFromEntity(entity)
' If object_context Is Nothing OrElse object_context.TransactionHandler Is Nothing Then Return Nothing
' Return object_context.TransactionHandler.DbContext
'End Function
'Private Function GetObjectContextFromEntity(ByVal entity As Object) As ObjectContext
' Dim field = entity.[GetType]().GetField("_entityWrapper")
' If field Is Nothing Then Return Nothing
' Dim wrapper = field.GetValue(entity)
' Dim [property] = wrapper.[GetType]().GetProperty("Context")
' Dim context = CType([property].GetValue(wrapper, Nothing), ObjectContext)
' Return context
'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
<Extension()>
Function GetDbContext(Of T As Class)(ByVal dbSet As DbSet(Of T)) As DbContext
Dim infrastructure = TryCast(dbSet, IInfrastructure(Of IServiceProvider))
Dim serviceProvider = infrastructure.Instance
Dim currentDbContext = TryCast(serviceProvider.GetService(GetType(ICurrentDbContext)), ICurrentDbContext)
Return currentDbContext.Context
End Function
<Extension()>
Function Clonar(Of T)(ByVal self As T) As T
Dim serialized = JsonConvert.SerializeObject(self)
Return JsonConvert.DeserializeObject(Of T)(serialized)
End Function
<Extension()>
Sub CopiarPropiedadesDe(Of T)(ByVal Destino As T, ByVal Origen As T)
Dim props = Destino.GetType.GetProperties.Where(Function(x) x.CanWrite).ToList
For Each p In props
p.SetValue(Destino, Origen.GetType.GetProperty(p.Name).GetValue(Origen))
Next
End Sub
'<Extension()>
'Function ObtieneContexto(Of T As Class)(ByVal Objeto As T) As DbContext
' Dim infrastructure = TryCast(Objeto, IInfrastructure(Of IServiceProvider))
' Dim serviceProvider = infrastructure.Instance
' Dim currentDbContext = TryCast(serviceProvider.GetService(GetType(ICurrentDbContext)), ICurrentDbContext)
' Return currentDbContext.Context
'End Function
End Module
End Namespace