2011-11-15 17 views
19

Tôi mới làm quen với EF, và cố gắng để có được mối quan hệ một chiều nhiều với cách tiếp cận mã đầu tiên. Ví dụ: nếu tôi có hai lớp sau (không phải mô hình thực của tôi) có mối quan hệ N * N giữa chúng, nhưng không có thuộc tính điều hướng từ phía "Khách hàng".giả thiết nhiều người một chiều với Code First Entity Framework

public class User { 
    public int UserId { get; set; } 
    public string Email { get; set; } 
    public ICollection TaggedCustomers { get; set; } 
} 
public class Customer { 
    public int CustomerId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
}

Mã lập bản đồ trông giống như ...

modelBuilder.Entity() 
     .HasMany(r => r.TaggedCustomers) 
     .WithMany(c => c.ANavgiationPropertyWhichIDontWant) 
     .Map(m => 
     { 
      m.MapLeftKey("UserId"); 
       m.MapRightKey("CustomerId"); 
       m.ToTable("BridgeTableForCustomerAndUser"); 
     });

Cú pháp này buộc tôi phải có "WithMany" cho đối tượng "khách hàng". Sau đây url, nói "Theo quy ước, Mã số đầu tiên luôn diễn giải một mối quan hệ một chiều như một-nhiều."

Có thể ghi đè hoặc tôi có nên sử dụng bất kỳ cách tiếp cận nào khác không?

Trả lời

35

Sử dụng này:

public class User { 
    public int UserId { get; set; } 
    public string Email { get; set; } 
    // You must use generic collection 
    public virtual ICollection<Customer> TaggedCustomers { get; set; } 
} 

public class Customer { 
    public int CustomerId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

Và bản đồ nó với:

modelBuilder.Entity<User>() 
    .HasMany(r => r.TaggedCustomers) 
    .WithMany() // No navigation property here 
    .Map(m => 
     { 
      m.MapLeftKey("UserId"); 
      m.MapRightKey("CustomerId"); 
      m.ToTable("BridgeTableForCustomerAndUser"); 
     }); 
+1

Cảm ơn rất nhiều, thật là một giải pháp đơn giản. Để cứu lấy khuôn mặt của tôi, tôi sẽ đổ lỗi cho việc thiếu tài liệu và không phải là sự thiếu hiểu biết của riêng tôi. –

+0

Có thể thực hiện điều này với các thuộc tính không? – TDaver

+0

@TDaver: Không, thuộc tính chỉ có thể hoạt động nếu bạn có thuộc tính điều hướng ở cả hai đầu và không muốn kiểm soát tên và cột trong bảng giao diện. –

Các vấn đề liên quan