2017-08-28 3 views
0

Ich benutze SQL Server und Dapper und ich möchte meine Modelle Objekt ordnungsgemäß in der Datenbank speichern und abrufen.Map List-Objekt mit SQL Server und Dapper

Das ist mein Modell, die Guid-Liste ist eine Liste anderer Modell 'Generator' IDs.

public class GeneratorSet 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public List<Guid> GeneratorsList { get; set; } 
} 

Mein Ziel ist es richtig zu einer SQL Server-Tabelle, um diese Aufgabe zu erfassen und dann mit Dapper richtig meine Objekte aus der Datenbank abgerufen werden. Die Beziehung ist viele zu viele (Set kann viele Generatoren besitzen, und Generator kann von vielen Sätzen besetzt sein).

+0

Haben Sie irgendwas versucht? Was ist dein Problem? – Milney

+0

Ich habe versucht, Tabellenzeile als varchar zu setzen und die Liste in Zeichenfolge mit jeder Guid durch Komma getrennt zu speichern. Und dann machen Sie einige schwere Mapping mit Dapper. Aber das sieht nicht gut und professionell aus. Ich ziele auf eine Möglichkeit, grundlegende Dapper-Map wie 'var GeneratorSet = connection.QueryFirst (" SELECT * FROM GeneratorSet WHERE Id = @ID; ", neue {ID = Id});' – Erexo

Antwort

2

Sie können dies mit dem SplitOn-Parameter tun ... Hier ist eine Anleitung;

https://taylorhutchison.github.io/2016/03/23/dapper-orm-complex-queries.html

Oder nur durch eindeutige Namen und Mapping mit einem Lambda-Verwendung - am Beispiel aus der Dokumentation (https://github.com/StackExchange/Dapper);

var sql = 
@"select * from #Posts p 
left join #Users u on u.Id = p.OwnerId 
Order by p.Id"; 

var data = connection.Query<Post, User, Post>(sql, (post, user) => { post.Owner = user; return post;}); 
var post = data.First(); 

Assert.Equal("Sams Post1", post.Content); 
Assert.Equal(1, post.Id); 
Assert.Equal("Sam", post.Owner.Name); 
Assert.Equal(99, post.Owner.Id); 

Ich kann nicht die eigentliche Code/Abfrage schreiben, wie ich Ihr Datenbankschema nicht wissen ... aber hoffentlich bekommen Sie die Idee?

+1

Ja, ich Ich habe es geschafft, aufgrund meiner Anweisungen zu tun, was ich will. Vielen Dank! – Erexo