2015-06-24 16 views
10

Tôi có nhiều bảng có cùng cấu trúc mô hình nhưng với các tên bảng khác với dữ liệu khác (trong trường hợp này sẽ là ~ 100 bảng). Tôi muốn tự động chuyển tên bảng trong thời gian chạy bằng Entity Framework (ví dụ lấy bảng tên từ định tuyến). Các bảng trong cơ sở dữ liệu tự động thêm và xóa bằng tập lệnh khác. Có một cách để làm điều này với hiệu suất tốt như thế này?Tên bảng động với khung thực thể

db.Table("TableName")<SpecificModel>.Where(x => x.ID == ID) 
+2

Tôi không thể không tự hỏi tại sao bạn không chỉ bình thường hóa các bảng của bạn thành một bảng? Nếu chúng là cùng một cấu trúc ... –

+0

Cách đơn giản nhất là bình thường hóa nhưng tôi không thể làm điều đó trong dự án này. Bàn cần được tách riêng – Obin

+0

Để thực hiện những gì bạn muốn làm, bạn cần phải cập nhật tệp edmx của mình bằng siêu dữ liệu mới của các bảng đã tạo. Tôi không biết cách để làm điều này trong thời gian chạy, bởi vì việc cập nhật tệp edmx sẽ yêu cầu xây dựng lại vì mã mới sẽ được tạo. Tôi nghĩ rằng Entity Framework hiện không hỗ trợ những gì bạn đang cố gắng làm. – tdbeckett

Trả lời

5

Bạn có muốn làm như thế này không?

foreach (string tableName in new[] { "Table1", "Table2" }) 
{ 
    var result = dbContext.Database.SqlQuery<SpecificModel>(string.Format("SELECT * FROM {0} WHERE [email protected]", tableName), 1).FirstOrDefault(); 
} 
+0

Nó hoạt động tốt nhưng nó vẫn là truy vấn. Có một cách để làm điều này với LINQ? – Obin

+0

Vâng, tôi nghĩ chúng ta có thể làm điều đó trong LINQ bằng cách sử dụng Reflection và Expression, nhưng ít phức tạp một khi tôi nhận được cho bạn biết. Trong khuôn khổ thực thể, cuối cùng biểu thức LINQ sẽ chuyển thành truy vấn sql, do đó không có sự khác biệt nhiều hơn với điều đó. Sử dụng phương pháp này cũng EF ánh xạ dữ liệu của bạn vào đối tượng lớp (SecificModel) right :) –

+0

Điều này sẽ cho phép tiêm sql. – tdbeckett

3

Tôi đã làm một cái gì đó như thế này. http://nodogmablog.bryanhogan.net/2013/08/entity-framework-in-an-dynamics-nav-navision-envirnoment/

Tôi có các bảng giống hệt nhau, nhưng chúng có tên khác nhau. Ví dụ, một bảng khách hàng nhưng với các tiền tố khác nhau cho các công ty khác nhau.

[ACME$Customer] 
[SuperCorp$Customer] 

Tôi đã kết thúc bằng cách sử dụng biên dịch động. Đó là một bài đăng trên blog khá chi tiết nên tôi sẽ không đi sâu vào đây.

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