Chúng tôi đang sử dụng EF 5.0 làm ORM của chúng tôi trong giải pháp kinh doanh của chúng tôi, được cấu trúc theo kiểu n lớp với mọi thứ được tách rời và một gốc thành phần đẹp với ninject.Entity Framework 5 loại dữ liệu sai trong truy vấn
Gần đây, chúng tôi đã xây dựng cơ sở dữ liệu sử dụng phân vùng bên dưới và chúng tôi có một số chỉ mục quan trọng trên các cột DATE
.
Các cột được khai báo chính xác trên Sql Server 2008. Chúng tôi cũng đã thêm đúng kiểu dữ liệu trong ánh xạ EF, với lệnh HasColumnType("Date")
.
Tuy nhiên, khi truy vấn bảng thông qua LINQ to Entities, các tham số mà chúng tôi lọc ngày được tạo kiểu DateTime2
và thậm chí các cột được đúc thành DateTime2
trong các truy vấn sao cho loại khớp với tham số.
Hành vi này có một số vấn đề. Trước hết, nếu tôi nói với EF engine rằng cột trên cơ sở dữ liệu là DATE
tại sao nó phải đưa nó vào DateTime2
?
Thứ hai, diễn viên này làm cho cơ sở dữ liệu bỏ qua các chỉ mục, do đó không sử dụng phân vùng. Chúng tôi có một năm cho mỗi phân đoạn phisical, và nếu tôi yêu cầu một phạm vi ngày, giả sử, tháng 2 năm 2013 đến tháng 3 năm 2013 việc quét chỉ được thực hiện trên một phân vùng vật lý. Nó hoạt động chính xác nếu sử dụng đúng kiểu dữ liệu DATE
nhưng với việc truyền tới DateTime2
tất cả các phân vùng sẽ được quét, giảm hiệu suất đáng kể.
Bây giờ, tôi chắc chắn rằng tôi đang bỏ lỡ một cái gì đó, bởi vì nó sẽ là khá ngu ngốc rằng Microsoft ORM không hoạt động tốt trên Microsoft Sql Server.
Tôi không thể tìm thấy bất kỳ tài liệu nào về cách EF sử dụng đúng loại dữ liệu trong các truy vấn, vì vậy tôi hỏi tại đây. Bất kỳ trợ giúp sẽ được đánh giá cao.
Cảm ơn.
Tôi đang sử dụng tải chậm trên một tấn tài sản điều hướng. Tôi sẽ cần phải háo hức tải mọi thứ và tự tạo đồ thị đối tượng của tôi, rất phức tạp và sâu sắc, vì vậy đó không phải là một lựa chọn. Có thể chuyển sang một ORM khác như NHibernate sẽ là lựa chọn đúng đắn. –
@MatteoMosca - Tôi không nghĩ đó là trường hợp, trừ khi tôi đã hiểu lầm vấn đề. EF cho phép bạn thực hiện các kết quả của một sp như các thực thể * đính kèm * ("được theo dõi bởi ngữ cảnh" theo MSDN), do đó tải chậm nên hoạt động. Những gì bạn không thể làm là hỗ trợ * háo hức * tải bằng cách sử dụng phương pháp này. – Olly
Điều đó có thể thú vị. Tôi nghĩ rằng tôi đã bỏ lỡ tính năng này. Tôi sẽ xem xét nó càng sớm càng tốt. –