【问题标题】:Map List object using SQL Server and Dapper使用 SQL Server 和 Dapper 映射列表对象
【发布时间】:2017-08-28 21:52:21
【问题描述】:

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

这是我的模型,guid 列表是其他模型“生成器”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 从数据库中正确检索我的对象。这种关系是多对多的(集合可以“拥有”许多生成器,并且生成器可能被许多集拥有)。

【问题讨论】:

  • 你有没有尝试过?你有什么问题?
  • 我尝试将表行设置为 varchar 并将列表存储在字符串中,每个 guid 用逗号分隔。然后使用 dapper 进行一些重映射。但这看起来并不好也不专业。我的目标是找到一种使用基本小巧地图的方法,例如var generatorSet = connection.QueryFirst&lt;GeneratorSet&gt;("SELECT * FROM GeneratorSet WHERE Id= @ID;", new { ID = Id });

标签: sql-server dapper


【解决方案1】:

您可以使用 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);

我无法编写实际的代码/查询,因为我不知道您的数据库架构...但希望您明白吗?

【讨论】:

  • 是的,由于您的指示,我已经成功地完成了我想做的事情。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
相关资源
最近更新 更多