2008-10-17 23 views
6

Tôi đang làm việc với một số bảng nơi tôi muốn lớp C# có tên thuộc tính khác với cột bảng bên dưới. Tuy nhiên, khi tôi sử dụng phương thức Dịch để đọc kết quả, các thuộc tính không khớp với tên nguồn không bao giờ được điền. Ngay cả khi tôi sử dụng LINQ để tạo ra SQL.LINQ to SQL DataContext.Translate và thuộc tính có tên khác với nguồn

Ví dụ, bàn của tôi được định nghĩa trong DB như thế này:

CREATE TABLE User_Entry (
    UserId int IDENTITY (1, 1) NOT NULL, 
    Login_Id varchar (50) NOT NULL, 
    Active char(1) NOT NULL, 
    PASSWORD varchar(75) NULL 
) 

Đây là lớp nó ánh xạ tới (tạo ra bởi nhà thiết kế LINQ ... LINQ thuộc tính và các công cụ khác bỏ qua cho ngắn gọn):

public partial class User 
{ 
    int UserId; 
    string Login; 
    string Active, 
    string Pwd 
} 

Khi tôi làm như sau, thuộc tính Login và Pwd không được điền nhưng UserId và thuộc tính đang hoạt động.

Data.DbContext db = new Data.DbContext(); 

IQueryable query = db.Users.Where(usr => usr.Login == request.LoginString); 

SqlCommand cmd = (SqlCommand)data.GetCommand(query); 

... execute the command (asynchronously) ... 

User user = db.Translate<User>(dataReaderResult).FirstOrDefault(); 

! Tại thời điểm này, tôi kiểm tra đối tượng người dùng và tôi có thể thấy rằng cột Đăng nhập và Pwd không được điền!

Đây là sql được tạo ra:

exec sp_executesql N'SELECT [t0].[UserID] AS [UserId], [t0].[Login_ID] AS [Login], [t0].[Active], [t0].[PASSWORD] AS [Pwd] 
FROM [dbo].[User_Entry] AS [t0] 
WHERE [t0].[Login_ID] = @p0', N'@p0 varchar(13)', @p0 = 'test_user' 

Ban đầu, khi cột UserId đã có một tên thuộc tính khác nhau tôi đã nhận được một ngoại lệ The required column [UserId] does not exist in the results. Tôi nhìn xung quanh và tôi thấy một phản ứng từ một số người MSFT nói rằng đó là một lỗi.

Điều này có liên quan không? Nó đã từng được sửa chưa? Có ai biết khi nào nó sẽ được sửa?

Chỉnh sửa: Một số thông tin khác.

Các lỗi mà tôi nghĩ rằng đây có liên quan đến có một bình luận từ Kathy Lu MSFT vào ngày 14 tháng 8 năm 2007 here, nơi cô nói:

Cảm ơn bạn đã báo cáo vấn đề này. Từ vấn đề của bạn, chúng tôi có thể tái tạo vấn đề và nhóm sản phẩm đang xem xét giải pháp và phân loại phù hợp.

Tôi tự hỏi liệu điều này có liên quan đến những gì tôi đang trải nghiệm hay không và liệu tôi có thể nhận thêm thông tin về nó hay không. Tôi đã tìm kiếm linq translate site:connect.microsoft.com nhưng tôi không tìm thấy bất kỳ thứ gì.

+0

Bạn đang sử dụng phiên bản beta hoặc RTM? –

+0

Đó là Visual Studio 2008 SP1 (.Net 3.5 SP1) –

+0

Vẫn còn có vẻ là một vấn đề trong .Net 4.0 – Pedro

Trả lời

1

Lỗi mà tôi cho rằng điều này có liên quan đến nhận xét từ Kathy Lu MSFT vào ngày 14 tháng 8 năm 2007, nơi cô ấy nói "Cảm ơn bạn đã báo cáo vấn đề này. Từ vấn đề của bạn, chúng tôi có thể tạo lại vấn đề và nhóm sản phẩm đang tìm kiếm vào một phân loại và giải pháp thích hợp. " từ https://forums.microsoft.com/msdn/ShowPost.aspx?PostID=1983746&SiteID=1&pageid=0

Tôi tự hỏi liệu điều này có liên quan đến những gì tôi đang gặp phải không và liệu tôi có thể nhận thêm thông tin về nó hay không. Tôi tìm kiếm (linq dịch site: connect.microsoft.com) nhưng tôi không tìm thấy gì cả.

1

Thuộc tính cột có được thiết lập đúng không? Có một thuộc tính tên.

http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.columnattribute_members.aspx

Ngoài ra, Translate's documentation ... bạn muốn được ánh xạ (như trong thời điểm viên đạn đầu tiên).


Thuật toán cho phù hợp với các cột trong kết quả các lĩnh vực và các thuộc tính trong đối tượng hoạt động như sau:

  • Nếu một lĩnh vực hoặc tài sản được ánh xạ tới một tên cột cụ thể, rằng tên cột được mong đợi trong resultset.
  • Nếu trường hoặc thuộc tính không được ánh xạ, cột có cùng tên với trường hoặc thuộc tính được mong đợi trong kết quả.
  • So sánh được thực hiện bằng cách tìm kiếm kết quả khớp chữ thường. Nếu không tìm thấy kết quả trùng khớp này, tìm kiếm tiếp theo sẽ xảy ra cho một kết quả khớp không phân biệt chữ hoa chữ thường.

Xin chờ, bạn đang sử dụng quá tải Dịch chung. Hãy thử quá tải Dịch bằng cách sử dụng tham số Loại và xem điều đó có xử lý tốt hơn cho bạn hay không.

+0

Cảm ơn câu trả lời của bạn. Tôi đã kiểm tra tất cả mọi thứ mà bạn đã đề cập. Thuộc tính cột của tôi được thiết lập đúng khi nhà thiết kế tạo ra chúng. Tôi cũng đã thử nghiệm bằng cách sử dụng Dịch (typeof (User), dataReaderResult); nhưng nó có cùng một vấn đề. Xem thêm thông tin được thêm vào bài đăng của tôi, tôi nghĩ rằng nó có liên quan. –