2012-02-25 13 views
6

Mam bazę danych z kolumnami id, takimi jak BookId, AuthorId, itp. Moje pliki kodu mają jednak właściwość Id. Próbuję przekonwertować części programu, które używają NHibernate z Dapper, więc staram się wyeliminować konieczność posiadania zarówno właściwości Id, jak i BookId. NHibernate ma wbudowaną mapę tożsamości, która odwzorowuje BookId na właściwość Id obiektów Book i podobnie AuthorId na właściwość Id na obiektach autora.Jak odwzorować kolumnę tożsamości, która ma inną nazwę, z Dapper?

Czy istnieje sposób na zrobienie tego Dappera, poza podaniem aliasu do kolumny, w zapytaniu sql?

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; } 
} 

Zapytanie próbka że używam wygląda następująco:

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

Jeśli Wytworny nie obsługuje tego łatwo, wszelkie myśli na jakie inne opcje mam?

+0

Zrobiłem to, używając aliasu dla kolumny. Dlaczego nie chcesz używać aliasu? – LordHits

+0

@LordHits Próbuję tego uniknąć, ponieważ mam wiele kolumn, które są zwracane. Raczej nie będę musiał jawnie wypisać każdy w sql. Ponadto nie sądzę, że będzie działać zgodnie z oczekiwaniami przy połączeniach tabel –

Odpowiedz

15

Według projektu dapper nie ma warstwy odwzorowania. Jeden krok w dół tej drogi i zanim się zorientujemy, co się nagle wydarzyło, utopimy się w plikach konfiguracyjnych. Tak: dwie opcje:

  • dodać alias w SQL
  • dodać podkładkę w C#

więc albo (SQL):

select BookId as [Id], Name from Books 

lub (C#):

private int BookId { get { return Id; } set { Id = value; } } // just for dapper 
Powiązane problemy