Tôi có một vấn đề khó khăn khi tôi muốn sử dụng sự phản chiếu trên ánh xạ khung thực thể của mình để tìm tất cả các khóa ngoài tham chiếu bảng và tôi muốn tên của các cột đó là các khóa ngoại.Khung thực thể - Phản ánh về các khóa và mối quan hệ nước ngoài
Theo another post on SO, tôi có thể dễ dàng tìm thấy thuộc tính điều hướng trên bảng thông qua phản ánh. Nhưng điều này không cho tôi tên của thuộc tính hoặc cột có chứa giá trị khóa ngoại.
Lý do tôi đang cố gắng làm điều này là tôi có một số lượng lớn các bảng (gần 40) tham chiếu một bảng mục. Giả sử người dùng nhập một giá trị mới vào bảng mục có tên "Andew" và sau đó một quản trị viên nhận thấy đó thực sự chỉ là lỗi đánh máy cho mục đã tồn tại "Andrew". Bây giờ tôi muốn tìm tất cả các tham chiếu đến "Andew" và thay đổi các tham chiếu đó thành "Andrew". Tôi muốn làm điều này một cách hiệu quả, vì vậy việc sử dụng các thuộc tính điều hướng ngược sẽ quá chậm vì bạn phải tải các giá trị trước khi sửa đổi chúng. Những gì tôi muốn làm là có thể phản ánh một danh sách các bảng và các cột, sau đó phát hành các lệnh cập nhật trực tiếp vào cơ sở dữ liệu. Nó sẽ giống như thế này:
var command = String.Format("UPDATE [{0}] SET [{1}] = {{1}} WHERE [{1}] = {{0}}; ", fk.FromTableName, fk.FromColumnName);
dataContext.ExecuteStoreCommand(command, new Object[] { oldID, newID });
Trong LINQ to SQL này đã thực sự khá dễ dàng ... 20 dòng suy tư về LINQ đang tự động tạo ra và tôi đã được thực hiện, nhưng chúng tôi chuyển sang EF thời gian gần đây và tôi không thể tìm thấy tên của các cột khóa ngoài thông qua EF.
Ví dụ đơn giản về những gì tôi đang tìm kiếm: nếu tôi có đối tượng được gọi là Nhân viên có thuộc tính điều hướng được gọi là Người quản lý và khóa ngoại của ManagerID, thì tôi muốn biết rằng Người quản lý là tài sản điều hướng của tôi và bộ nhớ cơ bản là thuộc tính ManagerID. Tôi muốn thực hiện điều này một cách nghiêm ngặt thông qua sự phản chiếu hoặc siêu dữ liệu để tôi có thể xây dựng một truy vấn dynmaic từ nó.
bạn nhận được phiếu bầu xuống vì vậy tôi cho rằng tôi không phải là người duy nhất gặp khó khăn khi hiểu bạn đang làm gì. bạn có thể chỉ cần 'employee.managerId' hoặc' employee.manager.id'? bạn phải biết quy ước là gì, DBA của bạn không thể chỉ đơn giản là thay đổi DB mà không ảnh hưởng đến dự án của bạn theo những cách khác. – Eonasdan
@Eonasdan - cảm ơn. Tôi đã tự hỏi tại sao tôi đã được downvoted. Tôi viết lại hoàn toàn để hy vọng làm cho nó rõ ràng hơn nhiều. Thật không may bây giờ nó dài hơn nhiều, và tôi đã cố gắng để giữ nó ngắn. – pbarranis