Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để thể hiện một mối quan hệ có nhiều thông qua trong Entity Framework 5?

Bạn có một kiểu dữ liệu mà bạn đang gọi các tên riêng biệt. Đó là một chút khó hiểu. Tuy nhiên, để điều này hoạt động với mã, trước tiên bạn chỉ cần cấu hình thông thạo sau trong lớp Custom DbContext của bạn:

ghi đè
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");
       });
}

Điều này giả sử lớp người dùng của bạn trông giống như sau:

[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; }
}

Nếu bạn sử dụng phương pháp trên, mọi đối tượng người dùng của bạn sẽ có một thuộc tính điều hướng trên đó có tên là Bạn thân. Khi truy vấn người dùng, bạn sẽ muốn tải người dùng thân thiết , thực hiện:

context.users.Include("Buddies")

Hơn nữa, Để giải quyết vấn đề của bạn với nhiều người đọc. Đó là vì bạn chưa liệt kê truy vấn (db.users) từ vòng lặp đầu tiên của bạn. Để giải quyết vấn đề đó, bạn có thể liệt kê truy vấn như sau:

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

Và nếu bạn sử dụng cấu hình ở trên, bạn không cần phải thử và đối sánh id, bạn chỉ cần lấy danh sách (trường rỗng nếu mới) từ người dùng bằng cách sử dụng thuộc tính điều hướng bạn bè (ảo, tải chậm), thực hiện:

user.Buddies

Như bạn có thể thấy, bạn không thực sự cần một 'Model.buddy' (vì nó chỉ chứa một ánh xạ id) Khung thực thể sẽ chăm sóc liên kết. Tuy nhiên, nếu không phải lúc nào bạn cũng đưa Bạn thân vào truy vấn người dùng của mình, bạn có thể muốn có bảng. Điều này sẽ được truy vấn với LINQ theo cách sau:

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. MySQL JOIN trả về các trường NULL

  2. Tôi bối rối về các kết nối MySQL đồng thời

  3. Làm cách nào để kích hoạt Nhật ký truy vấn MySQL?

  4. Chạy truy vấn MySQL trên máy từ xa thông qua ssh trong dòng lệnh

  5. EF Core `update-database` trên MySql không thành công với` __EFMigrationsHistory 'không tồn tại`