gpt4 book ai didi

Dapper 正确对象/聚合映射

转载 作者:行者123 更新时间:2023-12-04 11:29:22 24 4
gpt4 key购买 nike

我最近开始评估 Dapper 作为 EF 的潜在替代品,因为我对正在生成的 SQL 不太满意并希望对其进行更多控制。我有一个关于在域模型中映射复杂对象的问题。假设我有一个名为 Provider 的对象,Provider 可以包含多个 IEnumerable 类型的属性,这些属性只能通过父提供程序对象(即聚合根)访问。我看过类似的帖子,这些帖子已经使用 QueryMultiple 和 Map 扩展方法进行了解释,但想知道如果 Dapper 能够一举做到这一点,我是否想编写一种方法来立即加载整个对象图或者如果它需要一点一点地完成。例如,假设我的对象如下所示:

public AggregateRoot
{
public int Id {get;set;}
...//simple properties
public IEnumerable<Foo> Foos
public IEnumerable<Bar> Bars
public IEnumerable<FooBar> FooBars
public SomeOtherEntity Entity
...
}

是否有使用 Dapper 填充整个对象图的直接方法?

最佳答案

我有类似的情况。我让我的 sql 返回平坦,以便所有子对象都返回。然后我使用 Query<> 来映射完整的集合。我不确定你的套装有多大。

所以像这样:

var cnn =  sqlconnection();

var results = cnn.Query<AggregateRoot,Foo,Bars,FooBar,someOtherEntity,AggregateRoot>("sqlsomething"
(ar,f,b,fb,soe)=>{
ar.Foo = f;
ar.Bars = b;
ar.FooBar = fb;
ar.someotherentity = soe;
return ar;

},.....,spliton:"").FirstOrDefault();

所以 Query 标签中的最后一个对象是返回对象。对于 SplitOn ,您必须将返回视为映射将运行的平面数组。您将为每个新对象选择第一个返回值,以便新映射从那里开始。

例子:
select ID,fooid, foo1,foo2,BarName,barsomething,foobarid foobaritem1,foobaritem2 from blah

split 将是“ID,fooid,BarName,foobarid”。当它遍历返回集时,它将映射它可以在每个对象中找到的属性。

我希望这会有所帮助,并且您的返回集不会太大而无法平仓。

关于Dapper 正确对象/聚合映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7236818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com