2012-02-25 32 views
6

Tôi có một cơ sở dữ liệu với các cột id như BookId, AuthorId, vv Các tệp mã của tôi, tuy nhiên, chỉ có một thuộc tính Id. Tôi đang cố gắng để chuyển đổi các phần của chương trình sử dụng NHibernate với Dapper, vì vậy tôi đang cố gắng để loại bỏ sự cần thiết cho cả một Id và một tài sản BookId trên. NHibernate đã xây dựng bản đồ nhận dạng bản đồ BookId đến thuộc tính Id của đối tượng Book và tương tự AuthorId đến thuộc tính Id trên đối tượng Tác giả.Làm cách nào để ánh xạ cột nhận dạng, có tên khác với Dapper?

Có cách nào để thực hiện Dapper này, ngoài việc đặt bí danh cho cột, trong truy vấn sql không?

public class Book { 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class Author { 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

Một truy vấn mẫu mà tôi đang sử dụng trông giống như:

select * from Books b inner join Author a on a.AuthorId = b.AuthorId 

Nếu Dapper không hỗ trợ này một cách dễ dàng, bất kỳ suy nghĩ về những tùy chọn khác mà tôi có?

+0

Tôi đã thực hiện việc này bằng bí danh cho cột. Tại sao bạn không muốn sử dụng bí danh? – LordHits

+0

@LordHits Tôi đang cố gắng tránh điều đó vì tôi có nhiều cột được trả về. Tôi không muốn loại bỏ một cách rõ ràng từng cái trong sql. Ngoài ra, tôi không tin rằng nó sẽ làm việc như mong đợi với bảng tham gia –

Trả lời

15

Theo thiết kế, người lập bản đồ không có lớp ánh xạ. Một bước xuống con đường đó, và trước khi chúng tôi biết chuyện gì đã xảy ra đột ngột, chúng tôi sẽ chìm đắm trong các tập tin cấu hình. Vì vậy: hai lựa chọn:

  • thêm một bí danh trong SQL
  • thêm một shim trong C#

do đó, hoặc (sql):

select BookId as [Id], Name from Books 

hoặc (C#):

private int BookId { get { return Id; } set { Id = value; } } // just for dapper 
Các vấn đề liên quan