PDA

View Full Version : آموزش: فراخوانی یک رکورد جدول (Entity Framework)



ROSTAM2
پنج شنبه 17 آبان 1403, 07:50 صبح
سلام

من یک جدول دارم: (Requierments)

156268
برای فراخوانی یک رکورد بر اساس ID یک تابع کلی دارم که می تونم با استفاده از اون رکورد هر جدول از دیتابیس Projects رو فراخوانی کنم:


Shared Function GetProjectsEntry(Of TableType, IDType)(ID As IDType) As TableType
Dim IDParam As New ObjectParameter("ID", ID)
Dim q As String =
String.Format("SELECT VALUE {0} FROM {0} WHERE {0}.ID = @ID", GetType(TableType).Name)
Return Projects.CreateQuery(Of TableType)(q, IDParam).FirstOrDefault
End Function


همه کدهای مرتبط با تابع:

Imports System.Data.Objects
Class ApplicationData
Friend Shared Projects As New ProjectsEntities
Shared Function GetProjectsEntry(Of TableType, IDType)(ID As IDType) As TableType
Dim IDParam As New ObjectParameter("ID", ID)
Dim q As String =
String.Format("SELECT VALUE {0} FROM {0} WHERE {0}.ID = @ID", GetType(TableType).Name)
Return Projects.CreateQuery(Of TableType)(q, IDParam).FirstOrDefault
End Function
...
End Class


برای نمایش اطلاعات یک رکورد از جدول Requierments از این دستورات استفاده می کنم (Console Application):


Imports System.Reflection

Protected Friend Shared Sub ShowRecord()
Console.ForegroundColor = ConsoleColor.White
Console.Write("{0} Type Requierment-ID to Show Information: ", vbTab)
Console.ForegroundColor = ConsoleColor.Gray
Value = Console.ReadLine
If Value.Length = 0 Then Exit Sub
Try
Dim Requierment As Requirements
Requierment = ApplicationData.GetProjectsEntry(Of Requirements, Integer)(Val(Value))
If Requierment Is Nothing Then
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("{0} Requierment Not Found! (ID = {1})", vbTab, Value)
Exit Sub
End If
Console.WriteLine()
Console.ForegroundColor = ConsoleColor.DarkGreen
Console.Write("{0} Requierment ID: ", vbTab)
Console.ForegroundColor = ConsoleColor.Gray
Console.WriteLine("{0}", Value)
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("{0} {1}", vbTab, StrDup(30, "─"))
WriteRequiermentFields(Requierment)
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("{0} {1}", vbTab, StrDup(30, "─"))
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub



Protected Friend Shared Sub WriteRequiermentFields(
R As Requirements)
'Get Item─Name Max─Length....
Dim MaxLen As Integer = 0
Dim Value As Object
Dim PInfo As System.Reflection.PropertyInfo
For Each Field As String In SortedRequiermentFieldNames
If Field.ToLower = "id" Then Continue For
PInfo = GetType(Requirements).GetProperty(Field)
Value = PInfo.GetValue(R, New Object() {})
If IsDBNull(Value) = True Then Continue For
If String.IsNullOrEmpty(Value.ToString.Trim) = False Then
If Field.Length > MaxLen Then MaxLen = Field.Length
End If
Next


If MaxLen = 0 Then
Console.ForegroundColor = ConsoleColor.DarkCyan
Console.WriteLine("{0} Requierment has not any Information.", vbTab)
Exit Sub
End If


'──────────────── ──────
For Each Field As String In SortedRequiermentFieldNames
If Field.ToLower = "id" Then Continue For
PInfo = GetType(Requirements).GetProperty(Field)
Value = PInfo.GetValue(R, New Object() {})
If IsDBNull(Value) = True Then Continue For
If String.IsNullOrEmpty(Value.ToString.Trim) = False Then
WriteField(Field, Value, MaxLen + 1)
End If
Next
End Sub



Public Shared ReadOnly Property SortedRequiermentFieldNames() As String()
Get
Dim Expr As String() =
{"ID", "Title", "Explain", "ComputerName",
"Disk", "Path"}
Return Expr
End Get
End Property



Sub WriteField(Name As String, value As String, Optional MaximumLen As Integer = 9)
FillName(Name, MaximumLen)
Console.ForegroundColor = ConsoleColor.Green
Console.Write("{0} {1}: ", vbTab, Name)
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("{0}", value)
End Sub

Mahmoud.Afrad
شنبه 19 آبان 1403, 00:12 صبح
سوالی که برای من پیش آمده اینه که چرا SQL مینوسید در حالیکه دارید از EF استفاده میکنید؟

ROSTAM2
شنبه 19 آبان 1403, 04:20 صبح
سوالی که برای من پیش آمده اینه که چرا SQL مینوسید در حالیکه دارید از EF استفاده میکنید؟

من در مورد نسخه های مختلف Net. Framework سر در نمیارم ولی بنظر میاد برای نسخه بدون Core باید از این روش استفاده کرد....

Mahmoud.Afrad
سه شنبه 22 آبان 1403, 02:54 صبح
من در مورد نسخه های مختلف Net. Framework سر در نمیارم ولی بنظر میاد برای نسخه بدون Core باید از این روش استفاده کرد....

نخیر، میبایست از linq استفاده کنید
بهتره به آموزش ها نگاهی بیاندازید. مثلا برای EF6 از این لینک https://www.entityframeworktutorial.net/entityframework6/querying-with-entityframework.aspx