0

我们开始转换到 BL Toolkit,但遇到了一些问题,但没有找到答案。一个这样的问题是无法正确映射 DTO 上的 MapValue 属性。

使用 T4 模板,我们生成这个(作为示例):

[MapField("counterparty_fl")]
[MapValue(true,  'y')]
[MapValue(false, 'n')]
public bool CounterpartyFlag { get; set; } // flag_yn_TY(1)  

我们的数据库是 Sybase,字段对应的_fl 是一个接受 'y' 或 'n' 的 char(1)。

但是,当我查看以下链接查询生成的 SQL 时,它正在编写 [counterparty_fl] = 0。我需要的是 [counterparty_fl] = 'n'

var results = (from i in facade.InputList
               where (
                   i.UserIdentifier == criteria.UserId &&
                   i.CounterpartyFlag == false &&
                   i.Name == criteria.Name)
               select i);  

有人对 MapValue 有更好的运气吗?有什么建议么?

4

1 回答 1

2

linq 查询不支持这种类型的映射。问题是 CounterpartyFlag 字段可以映射到 'y'、'n' 值,但表达式中的 'false' 不能。

您可以将枚举用于 CounterpartyFlag 字段类型:

public enum
{
    [MapValue('y')] Yes,
    [MapValue('n')] No
}

这应该有效。

于 2011-01-14T22:01:20.540 回答