Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara mengekspresikan hubungan memiliki banyak melalui Entity Framework 5?

Anda memiliki satu tipe data yang Anda sebut nama terpisah. Itu sedikit membingungkan. Namun Untuk membuatnya bekerja dengan kode terlebih dahulu, Anda hanya perlu konfigurasi lancar berikut di kelas DbContext Kustom Anda:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<user>().
      HasMany(c => c.Buddies).
      WithMany().
      Map(
       m =>
       {
          m.MapLeftKey("user_id");
          m.MapRightKey("buddy_id");
          m.ToTable("buddies");
       });
}

Ini dengan asumsi kelas pengguna Anda terlihat seperti ini:

[Table("user")]
public class user
{
    public int id { get; set; }
    public string name { get; set; }
    public string email { get; set; }
    public virtual List<user> Buddies { get; set; }
}

Jika Anda menggunakan metode di atas, setiap objek pengguna yang Anda miliki akan memiliki properti navigasi di atasnya disebut Sobat. Saat menanyakan pengguna, Anda ingin bersemangat memuat pengguna sobat , lakukan:

context.users.Include("Buddies")

Selanjutnya, Untuk mengatasi masalah Anda dengan banyak pembaca. Itu karena Anda belum menghitung kueri (db.users) dari loop pertama Anda. Untuk mengatasinya Anda dapat menghitung kueri seperti ini:

var users = context.users.Include("Buddies").ToList();
foreach(var user in users)....

Dan jika Anda menggunakan konfigurasi di atas, Anda tidak perlu mencoba dan mencocokkan id, Anda cukup mendapatkan daftar (bidang nol jika baru) teman dari pengguna menggunakan properti navigasi sobat (virtual, malas dimuat), lakukan:

user.Buddies

Seperti yang Anda lihat, Anda tidak benar-benar membutuhkan 'Model.buddy' (karena hanya berisi pemetaan id) Kerangka entitas akan menangani penautan. Namun jika Anda tidak selalu menyertakan Sobat dalam kueri pengguna, Anda mungkin menginginkan tabel tersebut. Yang akan ditanyakan dengan LINQ dengan cara berikut:

var userBuddies = db.buddies.Where(buddy=>buddy.user_id == user.id).ToList();
//An enumerated list of user buddies 
//do stuff



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Terhubung ke MySQL menggunakan SSH Tunneling di node-mysql

  2. Mengonversi string ke format stempel waktu MySQL di php

  3. Ekstensi MySQL yang tidak digunakan lagi di PHP 5.5.x

  4. Konsol Admin Glassfish melempar java.lang.IllegalStateException saat membuat JDBC Pool

  5. LINQ ke SQL beberapa tabel kiri luar bergabung