2010-02-04 43 views
6

Tôi cần chạy một số SQL tùy chỉnh để trả về một danh sách các đối tượng từ một bảng. Tôi đang sử dụng ExecuteStoreQuery cho điều đó.Entity Framework: ObjectContext.ExecuteStoreQuery tạo ra các đối tượng tách rời

var q = context.ExecuteStoreQuery<ProductionUnit>(MySelectString, new SqlParameter("@ProductionUnitId", value)); 

Điều này dẫn đến q chứa bộ sưu tập ObjectResult, nhưng các phần tử ProductionUnit thực tế được tách riêng và khóa thực thể của chúng không có giá trị. Điều này tạo ra một số vấn đề khi cố gắng làm việc trên một số đối tượng hoặc mối quan hệ của chúng. Truy vấn SQL của tôi trả về một tập kết quả chứa tất cả các cột của bảng ProductionUnits tương ứng (và không có gì khác).

Bất kỳ điều gì khác tôi cần làm để các đối tượng này được theo dõi hoặc là hành vi này theo thiết kế?

Trả lời

3

Tự khắc phục sự cố - bạn cần sử dụng quá tải ExecuteStoreQuery cho phép bạn chỉ định tên EntitySet cho các thực thể được trả về của bạn.

+9

bạn có thể vui lòng cung cấp giải pháp trong ví dụ – user287745

1

Như có vẻ không phải là một câu trả lời chấp nhận với mã ...

Như @neaorin nói, để đảm bảo những thay đổi cho các đối tượng quay trở lại được theo dõi, sử dụng phương pháp

ExecuteStoreQuery <. .> (CommandText, entitySetName, MergeOptions, args paramaters)

như sau:

string strQuery = "SELECT * FROM employees WHERE id=999"; 
List<employee> employees; 
services = context.ExecuteStoreQuery<employee>(strQuery, "employees", System.Data.Objects.MergeOption.AppendOnly).ToList(); 

Tham số MergeOptions quy định những gì Framework thực hiện nếu một số thực thể trả về đã trôi nổi trong ngữ cảnh, tức là ghi đè lên hoặc sử dụng các đối tượng hiện có (mặc định).

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