ورود

View Full Version : مقاله: تابعی مشترک برای برگرداندن رکورد یا (Entry) بر طبق ID در Entity Framework



ROSTAM2
یک شنبه 04 شهریور 1403, 08:46 صبح
در این تابع EntityType از جدول هایی که فیلد ID دارند می تونن برای فیلتر Entry طبق ID استفاده بشن....


Friend Function GetEntry(Of T)(ID As Guid) As T
Dim QueryString As String = String.Format("SELECT VALUE {0} FROM {0} WHERE {0}.ID = @ID", GetType(T).Name)
Dim Entry As T
Entry = My.KeyStoreData.CreateQuery(Of T) _
(QueryString, New Objects.ObjectParameter("ID", ID)).FirstOrDefault
Return Entry
End Function


نمونه بکارگیری تابع:


Dim Entry As Object = Nothing
Select Case SelectedMenuItem
Case InternetbankMenuItem
Entry = GetEntry(Of InternetBank)(ID)
Case BlogPostMenuItem
Entry = GetEntry(Of BlogPost)(ID)
Case CertificateMenuItem
Entry = GetEntry(Of Certificate)(ID)
Case CreditCardMenuItem
Entry = GetEntry(Of CreditCard)(ID)
Case DatabaseMenuItem
Entry = GetEntry(Of Database)(ID)
Case LegalCaseMenuItem
Entry = GetEntry(Of LegalCase)(ID)
Case SanaMenuItem
Entry = GetEntry(Of SANA)(ID)
Case softwareMenuItem
Entry = GetEntry(Of Software)(ID)
Case UploadedFileMenuItem
Entry = GetEntry(Of UploadedFile)(ID)
Case websiteMenuItem
Entry = GetEntry(Of Websites)(ID)
End Select
My.KeyStoreData.DeleteObject(Entry)
My.KeyStoreData.SaveChanges()

mmbguide
دوشنبه 05 شهریور 1403, 13:29 عصر
آنچه که متوجه شدم شما دنبال این هستید که با یک متد بتونید از صدها جدول و برمبنای ID، ردیف مورد نظر را دریافت کنید. یک نگاهی به این صفحه بندازید.
https://codingblast.com/entity-framework-core-generic-repository/

این مورد شدنی هست. به نمونه زیر توجه کنید:

Namespace IRepositories
Interface ICommonRepository
Function GetValid(ByVal type As Type, ByVal id As Integer) As Boolean
End Interface
End Namespace

پیاده سازی متد:

Namespace Repositories
Public Class CommonRepository
Inherits IRepositories.ICommonRepository

Private ReadOnly db As Contexts.Context

Public Sub New(ByVal Context As Contexts.Context)
db = cesContext
End Sub

Public Function GetValid(ByVal type As Type, ByVal id As Integer) As Boolean
Dim ent = db.Find(type, id)
If ent Is Nothing Then Throw New Exception("Invalid data")
Dim result As Boolean = CBool(ent.[GetType]().GetProperty("fldValid").GetValue(ent))
Return result
End Function
End Class
End Namespace