.NET 6’daki yenilikler [16]:Entity Framework Core ile tersine mühendislikte N:M soyutlaması

Womanne

Member
Saf N:M ara tablolarıyla tersine mühendislik veritabanlarında, Entity Framework Core araçları sürüm 6.0’dan beri artık saf ara tablolar için sınıflar oluşturmaz, bunun yerine iki doğrudan ilişki oluşturur ICollection<T>.


N:M soyutlamasının işlevselliği temelde Entity Framework Core’un (“Navigasyonu Atla”) 5.0 sürümünden beri mevcuttur, ancak tersine mühendislikte henüz kullanılmamıştır.

Aşağıdaki şekildeki tablo yapısı örnek teşkil etmektedir.

Entity Framework Core 1.0 ila 5.0’da, komut Scaffold-DbContext sırasıyla Visual Studio NuGet Paket Yöneticisi konsolunda dotnet ef dbcontext scaffold Visual Studio dışında bir sınıf dahil olmak üzere üç sınıf oluşturdu Flight_Passenger ara tablo için, her biri 1:N ilişkisine sahip Flight Ve Passenger.

Entity Framework Core 6.0’da yalnızca iki sınıf vardır: Flight Ve Passenger doğrudan bir ilişkisi var.

Aşağıdaki kod, oluşturulan varlık sınıfını gösterir Flight:

using System;
using System.Collections.Generic;
namespace BO
{
public partial class Flight
{
public Flight()
{
Passenger_Person = new HashSet<Passenger>();
}

public int FlightNo { get; set; }
public string Airline { get; set; }
public string Departure { get; set; }
public string Destination { get; set; }
public DateTime FlightDate { get; set; }
public bool NonSmokingFlight { get; set; }
public short Seats { get; set; }
public short? FreeSeats { get; set; }
public int? Pilot_PersonID { get; set; }
public string Memo { get; set; }
public bool? Strikebound { get; set; }
public int? Utilization_ { get; set; }
public byte[] Timestamp { get; set; }

public virtual Pilot Pilot_Person { get; set; }

public virtual ICollection<Passenger> Passenger_Person { get; set; }
}
}



Bir sonraki liste, oluşturulan varlık sınıfını gösterir Passenger

using System;
using System.Collections.Generic;
namespace BO
{
public partial class Passenger
{
public Passenger()
{
Flight_FlightNo = new HashSet<Flight>();
}

public int PersonID { get; set; }
public DateTime? CustomerSince { get; set; }
public string PassengerStatus { get; set; }

public virtual Person Person { get; set; }

public virtual ICollection<Flight> Flight_FlightNo { get; set; }
}
}


Ne yazık ki, N:M soyutlamasını önleyecek bir anahtar yoktur. İsterseniz ara tablo için kendi sınıfınızı yazıp Fluent API üzerinden doğrudan ilişkiye ek veya alternatif olarak entegre edebilirsiniz.
()



Haberin Sonu
 
Üst