Middle
C#-da çoxdan-çox əlaqəni necə həyata keçirmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
"Çoxdan çox" əlaqəsi C#-də Entity Framework Core istifadə edilərək adətən müvəqqəti (birbaşa əlaqəli) cədvəl vasitəsilə həyata keçirilir.
İcra addımları:
- Varlıq yaradılması: Hər iki tərəf üçün iki varlıq sinfi müəyyən edin.
- Müvəqqəti varlıq yaradılması: Müvəqqəti cədvəl üçün ayrıca bir varlıq sinfi yaradın. Bu varlıq hər iki əlaqəli varlığa xarici açarları və əlaqəni təsvir edən əlavə xüsusiyyətləri ehtiva edəcək.
- DbContext-də əlaqələrin qurulması:
OnModelCreatingmetodunda,DbContext-inizdə müvəqqəti varlıq və iki əsas varlıq arasındakı əlaqələri qurun.HasMany,WithMany,UsingEntitymetodlarından istifadə edin.
Nümunə:
Tutaq ki, sizin Book və Author varlıqlarınız var və bir kitab bir neçə müəllif tərəfindən yazılır, və bir müəllif bir neçə kitab yaza bilər.
// Varlıq 1
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
public ICollection<BookAuthor> BookAuthors { get; set; }
}
// Varlıq 2
public class Author
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<BookAuthor> BookAuthors { get; set; }
}
// Müvəqqəti varlıq
public class BookAuthor
{
public int BookId { get; set; }
public Book Book { get; set; }
public int AuthorId { get; set; }
public Author Author { get; set; }
// Əlavə xüsusiyyətlər, məsələn, müəllifin rolu
public string Role { get; set; }
}
// DbContext-də quruluş
public class ApplicationDbContext : DbContext
{
public DbSet<Book> Books { get; set; }
public DbSet<Author> Authors { get; set; }
public DbSet<BookAuthor> BookAuthors { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<BookAuthor>()
.HasKey(ba => new { ba.BookId, ba.AuthorId }); // Birləşmiş əsas açar
modelBuilder.Entity<BookAuthor>()
.HasOne(ba => ba.Book)
.WithMany(b => b.BookAuthors)
.HasForeignKey(ba => ba.BookId);
modelBuilder.Entity<BookAuthor>()
.HasOne(ba => ba.Author)
.WithMany(a => a.BookAuthors)
.HasForeignKey(ba => ba.AuthorId);
}
}
İstifadə:
// Kitab və müəllif əlavə etmək
var book = new Book { Title = "Mənim Möhtəşəm Kitabım" };
var author = new Author { Name = "Jane Doe" };
var bookAuthor = new BookAuthor {
Book = book,
Author = author,
Role = "Əsas müəllif"
};
_context.Books.Add(book);
_context.Authors.Add(author);
_context.BookAuthors.Add(bookAuthor);
_context.SaveChanges();
// Müəlliflərlə kitabı əldə etmək
var bookWithAuthors = _context.Books
.Include(b => b.BookAuthors)
.ThenInclude(ba => ba.Author)
.FirstOrDefault(b => b.Id == book.Id);
// Kitablarla müəllifi əldə etmək
var authorWithBooks = _context.Authors
.Include(a => a.BookAuthors)
.ThenInclude(ba => ba.Book)
.FirstOrDefault(a => a.Id == author.Id);
Bu yanaşma müvəqqəti varlıq ilə əlaqəli ən tövsiyə olunan yoldur, çünki əlaqə haqqında əlavə məlumatları idarə etməyə imkan verir. Daha sadə hallarda EF Core avtomatik olaraq gizli müvəqqəti cədvəl yarada bilər, lakin açıq şəkildə müəyyən edilmiş varlıq daha çox nəzarət imkanı verir.