gpt4 book ai didi

c# - 在 Fluent NHibernate 中引用带有公式的实体

转载 作者:太空狗 更新时间:2023-10-29 23:24:40 24 4
gpt4 key购买 nike

我有一个 N:1 的模式存储在另一个表中并通过公式选择的父子关系。是否可以使用公式将此实体映射到父实体?

public class ParentEntity {
public virtual int ParentId { get; set; }
public virtual ChildEntity Child{ get; set; }
}


public class ParentMapping : ClassMap<ParentEntity> {
public ParentMapping() {
Table("ParentTable");

Id(x => x.ParentId).Column("ParentId").GeneratedBy.Assigned().Not.Nullable();
References<ChildEntity>(x => x.Child).Formula(
@"(
SELECT TOP 1 ChildTable.ChildId
FROM ChildTable
WHERE ChildTable.ParentId = ParentId
)"
);
}
}

此映射生成的 SQL 如下所示:

SELECT
this_.ParentId,
this_.ChildEntity_id
FROM ParentTable this_

这不是我要找的。

我如何引用此子实体并使用而不是 ChildId在父表中,选择 ChildId 的公式来自公式?

最佳答案

我不会以任何方式讨论这种方法的正确性,只是尝试回答。您正在尝试做的事情:应该有效。我已经在测试场景中检查了公式的正确性。所以,是的,公式可以完全按照这种方式使用。

但因为它不起作用,我会有点猜测。让我们从我的测试用例中生成的 SQL 开始,它正在运行。

SELECT this_.ParentId as ParentId3_0_
, (SELECT TOP 1 Child.ChildId
FROM Child
WHERE Child.ParentId = this_.ParentId) as formula1_0_
FROM Parent this_

可能的问题

我看到两个可能的问题

1。不同的 Child ID 列名称

首先在您的代码段中:

References<ChildEntity>(x => x.Child).Formula(
@"(
SELECT TOP 1 ChildTable.ChildId
FROM ChildTable
WHERE ChildTable.ParentId = ParentId
)"

是子主键的列名:ChildId 而在 SQL 片段中是 ChildEntity_id:

SELECT
this_.ParentId,
this_.ChildEntity_id
FROM ParentTable this_

2。 SQL 片段不匹配

其次,您提到(上面的 SQL 语句)是生成的。但它更像是这种映射的声明:

References<ChildEntity>(x => x.Child).Column("ChildEntity_id")

所以不能有一些旧的/其他的映射,实际上已经使用了吗?

总结我想说,这种映射方式是有效的。所以你走在正确的轨道上,但魔鬼隐藏在细节中 ;)

关于c# - 在 Fluent NHibernate 中引用带有公式的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13293026/

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