thảo luận [Thảo Luận] Sử dụng Entity Framework thế nào cho sang

  • Người tạo chủ đề Người tạo chủ đề Pepe.The.Frog
  • Ngày bắt đầu Ngày bắt đầu
Giả sử category với product quan hệ là 1-n (1 category có nhiều product)

Vậy khi tôi muốn lấy toàn bộ product của 1 category, thì đầu tiên theo anh thì:
1. Lấy category ra trước
2. Từ category lấy ra ở trên -> Dùng id của category đó để query thêm 1 lần nữa lấy toàn bộ Product?

Mình hiểu đúng ý thím không @Pepe.The.Frog

Đúng rồi, thì cách thường làm vẫn là GetListProductsByCategoryId mà. Thế thì thể hiện cái quan hệ one-to-many trên entity để làm chi?

via theNEXTvoz for iPhone
 
Đúng rồi, thì cách thường làm vẫn là GetListProductsByCategoryId mà. Thế thì thể hiện cái quan hệ one-to-many trên entity để làm chi?

via theNEXTvoz for iPhone

The best way to avoid the select N+1 problem in Entity Framework is to use the Include method. It will create one query with needed data using the SQL JOIN clause which is more efficient as compared to the previous one.

cơ mà dùng include thì nhiều trường hợp cũng ảnh hưởng hiệu năng phết
 
The best way to avoid the select N+1 problem in Entity Framework is to use the Include method. It will create one query with needed data using the SQL JOIN clause which is more efficient as compared to the previous one.

cơ mà dùng include thì nhiều trường hợp cũng ảnh hưởng hiệu năng phết

Rồi anh dev đẹp trai nào đó ko Inlcude thì sao? :ah:
 
Đúng rồi, thì cách thường làm vẫn là GetListProductsByCategoryId mà. Thế thì thể hiện cái quan hệ one-to-many trên entity để làm chi?

via theNEXTvoz for iPhone
đúng bài thì phải map từ domain entity => data model rồi mới save nhưng mà đọc code các nơi toàn thấy bem luôn domain entity cho lẹ
zsWkHJq.jpg
 
Rồi một a gà con lon ton sẽ ko gọi include vào mà đẩy cái object PhongBan ra ngoài. Rồi for loop cái cái list nhân viên ấy….

Code a ấy vẫn chạy, rồi thậm chí a ta quăng nó lên UI đẩy cả entity ra service, controller rồi nó seriealize ra json… Cho dù cái service chỉ cần mổi phòng ban thôi…

Ai kiểm soát dc chuyện đó

via theNEXTvoz for iPhone
Thím minh họa cho em đoạn code sai mà thím nói được không ạ. Em đọc nhưng chưa hiểu lắm, có gì em gà hỏi hơi nhiều mong thím thông cảm
 
Thím minh họa cho em đoạn code sai mà thím nói được không ạ. Em đọc nhưng chưa hiểu lắm, có gì em gà hỏi hơi nhiều mong thím thông cảm

Một Blog có nhiều Post:

C#:
List<Blog> blogs = await bloggingContext.Blogs
    .Where(x => x.Url.Contains("voz"))
    .ToListAsync();

foreach (Blog blog in blogs)
{
    Console.WriteLine(blog.Url);
    foreach (Post post in blog.Posts)
    {
        Console.WriteLine(post.Title);
    }
}
 
Đúng rồi, thì cách thường làm vẫn là GetListProductsByCategoryId mà. Thế thì thể hiện cái quan hệ one-to-many trên entity để làm chi?

via theNEXTvoz for iPhone
Cách này dài dòng khi anh link nhiều table nested với nhau lắm.
Ví dụ khi cần link thêm table Vendor với Product thì ntn ?
Lệnh include, ThenInclude nó tiện thì sử dụng thôi.
 
Sửa lần cuối:
Một Blog có nhiều Post:

C#:
List<Blog> blogs = await bloggingContext.Blogs
    .Where(x => x.Url.Contains("voz"))
    .ToListAsync();

foreach (Blog blog in blogs)
{
    Console.WriteLine(blog.Url);
    foreach (Post post in blog.Posts)
    {
        Console.WriteLine(post.Title);
    }
}
Giả sử có requirement là trên cùng 1 UI, hiển thị toàn bộ các Blog kèm theo toàn bộ các Post của Blog đó thì cái đoạn code trên vẫn đúng thím nhỉ?

Nhưng thường thường requirement sẽ là 1 màn hiển thị danh sách các Blog, bấm vào tiêu đề Blog thì mới hiện ra các Post của Blog đó.

Em hiểu đúng k thím
 
Giả sử có requirement là trên cùng 1 UI, hiển thị toàn bộ các Blog kèm theo toàn bộ các Post của Blog đó thì cái đoạn code trên vẫn đúng thím nhỉ?

Nhưng thường thường requirement sẽ là 1 màn hiển thị danh sách các Blog, bấm vào tiêu đề Blog thì mới hiện ra các Post của Blog đó.

Em hiểu đúng k thím

KHÔNG.

Đoạn trên vẫn sai. Đó là lý do tôi bảo 3 điểm trên khi xài EF vì mấy anh gà con lon ton ko biết mình đang code sai.

Và tôi gặp rất nhiều nên tốt nhất là đặt ra rule như vậy luôn

via theNEXTvoz for iPhone
 
KHÔNG.

Đoạn trên vẫn sai. Đó là lý do tôi bảo 3 điểm trên khi xài EF vì mấy anh gà con lon ton ko biết mình đang code sai.

Và tôi gặp rất nhiều nên tốt nhất là đặt ra rule như vậy luôn

via theNEXTvoz for iPhone
Nếu có requirment như trên, đằng nào cũng phải lấy ra toàn bộ blog và post của blog đó thì đoạn code đó sai chỗ nào nhỉ -_-
 
Nếu có requirment như trên, đằng nào cũng phải lấy ra toàn bộ blog và post của blog đó thì đoạn code đó sai chỗ nào nhỉ -_-

Hehe. Thấy chưa. Code vẫn chạy, vẫn ra kết quả đúng. Mọi thứ ok lah…

1 team dev 20 người mà anh nào cũng như này đúng là thảm hoạ. Haizz… mấy a senior cũng gà lun thì review code cũng ko ra đc. Mà nhiều khi lười dek review ấy.
FY7e6U1.gif


Lý do: đọc lại #15 của tôi nhé.

via theNEXTvoz for iPhone
 
Hehe. Thấy chưa. Code vẫn chạy, vẫn ra kết quả đúng. Mọi thứ ok lah…

1 team dev 20 người mà anh nào cũng như này đúng là thảm hoạ. Haizz… mấy a senior cũng gà lun thì review code cũng ko ra đc. Mà nhiều khi lười dek review ấy.
FY7e6U1.gif


Lý do: đọc lại #15 của tôi nhé.

via theNEXTvoz for iPhone
Em đã đọc còm 15 nhưng vẫn không hiểu vấn đề là gì @@
 
Em đã đọc còm 15 nhưng vẫn không hiểu vấn đề là gì @@
Vấn đề là mỗi lần loop 1 Blog thì sẽ sinh ra thêm query để lấy Post nữa do cái Post k dc fetch về trc đó
Đoạn này có 2 vòng for thì càng tệ hơn. Nếu dùng MSSQL thì có thể mở SQL Profiler để thấy query gửi lên server.
 
Sửa lần cuối:

Thống kê chủ đề

Ngày tạo
Pepe.The.Frog,
Người trả lời cuối
slowly_but_steadily,
Trả lời
81
Lượt xem
10.218
Quay lại
Lên đầu trang