当前位置: 首页 > 面试题库 >

Dapper多重选择:除非使用“淎S”,否则嵌套类的主键不会映射。

束志业
2023-03-14
问题内容

我有两节课:

class Foo{
    public int FooId { get; set; }
    ...
    public Bar Bar { get; set }
}

class Bar{
    public int BarId { get; set; }
    public int FooId { get; set }
    ...
}

当我然后像这样运行查询时:

sqlConnection.Query<Foo, Bar, Foo>(
    "SELECT * FROM Foo JOIN Bar ON Foo.FooId = Bar.FooId",
    (foo, bar) => { 
         foo.Bar = bar;
         return foo; 
       }, 
    splitOn: "FooId");

结果将是Foo和Bar上的所有属性都将映射为Bar.BarId除外。在检查了列名并针对我的Bar类输入数据库后,我仍然找不到任何区别。

我偶然发现的一件奇怪的事是,如果我写了:

"SELECT *, BarId AS BarId FROM Foo JOIN Bar ON Foo.FooId = Bar.FooId"

Bar.BarId实际上按预期映射,我是否误解了如何使用Dapper或这是一个错误?


问题答案:

它试图对进行拆分FooId,因此每次看到FooId它都在切割数据时。该用例 本质上
用于(所有情况下的)表具有可预测键(例如)的(不常见)场景Id。就您而言,这不是您想要的,因为您可以从数据库中获得:

FooId, a, b, c | BarId, FooId, x, y, z
^^ from Foo ^^ | ^^ from Bar ^^

但是,这分为FooId

FooId, a, b, c, BarId | FooId, x, y, z

这就是为什么BarId不包含在第二个对象中,以及为什么将其添加到末尾使其起作用的原因。

IIRC还有另一种用法,它接受 顺序的 密钥进行分割。您将使用:

splitOn: "FooId,BarId"


 类似资料:
  • 我有一个带有对象的RealmObject类,它实际上是PrimaryKey作为这个对象中的字符串。但不允许将对象作为主键。 因为目前不可能更改服务器的响应结构,所以我尝试了不同的方法来解决这个问题。但到目前为止,没有一个奏效。我在Android Studio中使用“io.realm:realm-gradle-plugin:0.87.2”作为和“realm-android”插件。 谢谢beeende

  • 我按照设置TwitterSource和HDFS汇的链接。 用于启动代理的命令: 我成功地做到了这一点,但现在有一个问题。在停止flume代理之前,输出不会被写入。一旦我杀了我的水槽代理,它就会被写到HDFS。 我有两个问题: 1)如何停止水槽剂 - 除了做CTRL C之外,还有其他方法吗? 2)我能让flume-agent在移动中向HDFS写信,而不必杀死代理吗? 注意:终止进程后,写入的文件。t

  • 我在当前项目中使用Sass(.scss)。 以下示例: HTML SCSS 这个很管用。 我可以处理多个类,同时使用嵌套样式。 在上面的示例中,我讨论了以下内容: CSS 在这种情况下,所有通常为,但为蓝色。 我如何在中与Sass嵌套?

  • 问题内容: 好的,所以我有一个带有嵌套选择器的占位符: 我想扩展它并添加到类中: 我想要的答案是这样的: 但是,我得到的答案是这样的: 我是在做错什么,还是这只是工作原理?为了澄清,我想将其合并。如果我直接在中添加一些内容,并且像添加了同样扩展%block的其他内容一样,则它们合并不会出现任何问题。 问题答案: Sass没有“合并”重复选择器的功能。编译CSS之后,您需要找到另一个实用程序来执行此

  • 问题内容: Python不允许将字典用作其他字典中的键。有使用非嵌套字典作为键的解决方法吗? 问题答案: 如果您有一本真正不变的字典(尽管我不清楚为什么不只使用成对列表:eg ),那么您可以将其转换为: 成对的元组。您已经在问题中做到了。需要A而不是因为结果依赖于元素的顺序和不变性。 冻结集。从数学的角度来看,这是一种更合适的方法,因为它只需要不可变元素上的 等式关系,而第一种方法除等式外还需要排

  • 问题内容: 这是我的配置: 根据此处找到的logback文档(http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy),文件将根据我的fileNamePattern 每分钟翻转一次。 我观察了它是如何工作的,这是我的发现: 它不会在很短的时间内创建日志文件。 当新日志到达时,它只会为前一分钟创建一个日志文件。(例如,我在