2017-08-28 24 views
0

我正在使用SQL Server和Dapper,我想将我的模型对象正确存储到数据库中并检索它们。使用SQL Server和Dapper的地图列表对象

这是我的模型,guid列表是其他模型'Generator'ID的列表。

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

我的目标是将此对象正确映射到SQL Server表,然后使用Dapper从数据库正确检索我的对象。这种关系是多对多的(可以'拥有'许多发电机,而发电机可以拥有多套)。

+0

你尝试过什么吗?你的问题是什么? – Milney

+0

我试着将表行设置为varchar,并将列表存储在字符串中,每个guid都用逗号分隔。然后使用小巧工具做一些沉重的映射。但是这看起来不够专业。我正在寻找一种像'var generatorSet = connection.QueryFirst (“SELECT * FROM GeneratorSet WHERE ID = @ID;”,new {ID = Id});' – Erexo

回答

2

您可以使用SplitOn参数来做到这一点......下面是一个指南;

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

或者只是通过使用一个lambda具有唯一的名称和映射 - 使用来自所述文档(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); 

我不能写实际的代码/查询,因为我不知道你的数据库模式......但希望你明白了吗?

+1

这样的基本Dapper映射的方法。根据你的指示,我设法做到了我想要的。谢谢! – Erexo