C# 在Nhibernate中,除了外键列之外,我还可以使用映射中的其他条件进一步限制一对多中的内容吗?

C# 在Nhibernate中,除了外键列之外,我还可以使用映射中的其他条件进一步限制一对多中的内容吗?,c#,nhibernate,nhibernate-3,C#,Nhibernate,Nhibernate 3,我遇到了这样一种情况,表a对象需要将一些表B记录映射为一对多,但表B中有太多的记录链接到特定的表a记录,因此我想进一步限制哪些记录将其映射为一对多。这是一个遗留数据库结构,由于生产中的其他遗留程序,无法轻松更改 假设表B如下所示: TableBPKey (int not null) TableAFKey (int not null) TableBColumn1 (char(4) null) TableBColumn2 (varchar(50) null) 假设TableBColumn1记录可能

我遇到了这样一种情况,表a对象需要将一些表B记录映射为一对多,但表B中有太多的记录链接到特定的表a记录,因此我想进一步限制哪些记录将其映射为一对多。这是一个遗留数据库结构,由于生产中的其他遗留程序,无法轻松更改

假设表B如下所示:

TableBPKey (int not null)
TableAFKey (int not null)
TableBColumn1 (char(4) null)
TableBColumn2 (varchar(50) null)
假设TableBColumn1记录可能包含以某种方式对表B记录进行分类的“N”4个字符代码中的任意一个

无论如何,假设我已经使用TableAFKey列将一映射到多。我还可以告诉映射,我只想要那些TableBColumn1==“ABCD”的记录吗

任何使用代码映射的方法都是首选解决方案。如果它可以在旧的xml映射中完成,但不能通过代码进行映射,那么我也将把它作为一个解决方案

谢谢

我相信一对多的“公式”方法就是你想要的。您应该能够使用它来指定附加的SQL条件,例如“is_active=1”

你可以在这里找到更多信息。

(更新链接)

我相信一对多的“公式”方法就是你想要的。您应该能够使用它来指定附加的SQL条件,例如“is_active=1”

你可以在这里找到更多信息。

(更新链接)

map.Where()是我想要的。我对它进行了测试,效果良好。您可以将一个sql表达式放在SQLWHERE子句之后,这样可以限制结果

Set<TableBObject>(x => x.TableBRecordsABCDOnly, map =>
            {

                map.Inverse(true);
                map.Cascade(Cascade.All);
                map.Key(k => k.Column(c => c.Name("TableAFKey")));
                map.Where("TableBColumn1 = 'ABCD'");

            },
            action => action.OneToMany());
Set(x=>x.TableBRecordsABCDOnly,map=>
{
逆映射(真);
map.Cascade(Cascade.All);
map.Key(k=>k.Column(c=>c.Name(“TableAFKey”));
其中(“TableBColumn1='ABCD'”;
},
action=>action.OneToMany());
map.Where()是我想要的。我对它进行了测试,效果良好。您可以将一个sql表达式放在SQLWHERE子句之后,这样可以限制结果

Set<TableBObject>(x => x.TableBRecordsABCDOnly, map =>
            {

                map.Inverse(true);
                map.Cascade(Cascade.All);
                map.Key(k => k.Column(c => c.Name("TableAFKey")));
                map.Where("TableBColumn1 = 'ABCD'");

            },
            action => action.OneToMany());
Set(x=>x.TableBRecordsABCDOnly,map=>
{
逆映射(真);
map.Cascade(Cascade.All);
map.Key(k=>k.Column(c=>c.Name(“TableAFKey”));
其中(“TableBColumn1='ABCD'”;
},
action=>action.OneToMany());

检查Oops,试试这个。我没看到他们提到这个。在那里,试试这个。我没看到他们提到那辆车,在哪里