Hãy nói rằng tôi có 2 mô hình sau đây:EF lõi one-to-nhiều mối quan hệ HasOne() WithMany() vs HasMany() WithOne()
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public Blog Blog { get; set; }
}
Bây giờ nếu tôi muốn cấu hình các mô hình mối liên hệ trong DbContext có bất kỳ sự khác biệt giữa:
modelBuilder.Entity<Post>()
.HasOne(p => p.Blog)
.WithMany(b => b.Posts);
và
modelBuilder.Entity<Blog>()
.HasMany(b => b.Posts)
.WithOne(p => p.blog);
và nếu có một diffrence, nó là gì? tôi nên viết cả hai hay chỉ một trong số họ?
Lưu ý: Tôi có phải xác định khóa ngoại không? Dựa trên kiến thức của tôi về cơ sở dữ liệu, bạn không thể tạo mối quan hệ mà không có khóa ngoại nhưng EF không yêu cầu bạn phải có các trường khóa ngoài. Vậy làm thế nào để EF xử lý các mối quan hệ mà không biết các khóa ngoại? Nó có gây ra hiệu suất giảm hoặc lỗi không?
vì vậy bạn có nói rằng không có sự khác biệt giữa 2 phương pháp và một trong hai cách tôi có thể sử dụng các mô hình theo cùng một cách?nhưng sử dụng HasOne(). WithMany là tốt hơn? – soorena12
Trong trường hợp này không có cách nào tốt hơn, chúng chỉ là cách khác nhau để tạo mối quan hệ giữa hai đối tượng, thường là ánh xạ từ con đến phụ huynh –
"Bạn có thể tạo mối quan hệ trong DbContext mà không có khóa ngoại trong cơ sở dữ liệu." Điều này LAF không đúng. EF sẽ giới thiệu một thuộc tính shadow không có trong model của bạn, nhưng sẽ nằm trong cơ sở dữ liệu. – Knelis