1

我遇到了一种情况,表 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 映射中完成,但不能通过代码映射,我也会将其作为解决方案。

谢谢!

4

2 回答 2

1

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

你可以在这里找到更多信息。 http://notherdev.blogspot.com.au/2012/02/mapping-by-code-map.html

(更新链接)

于 2012-04-05T01:32:42.593 回答
0

map.Where() 是我想要的。我测试了它并且它有效。您可以在 sql Where 子句之后放置一个可以工作的 sql 表达式,它会以这种方式限制结果。

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());
于 2012-04-05T01:47:20.863 回答