Чего-то непонимаю про subj
Есть табличка:
CREATE TABLE [dbo].[BindingToDump](
[ID] [int] IDENTITY(1,1) NOT NULL,
[PLACE_ID] [int] NOT NULL,
[PARAM_NAME] [nvarchar](50) NOT NULL,
[PARAM_ADDR] [nvarchar](5) NOT NULL,
[PARAM_TYPE] [int] NOT NULL,
[PARAM_DESC] [ntext] NOT NULL,
...
CREATE UNIQUE NONCLUSTERED INDEX [BindingToDumpIdName_ndx] ON [dbo].[BindingToDump]
(
[PLACE_ID] ASC,
[PARAM_NAME] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
далее объект, представляющий одну запись:
[TableName("BindingToDump")]
public class ParamBinding : EntityBase
{
[MapField("ID")]
public int Id { get; set; }
[MapField("PLACE_ID")]
public int PlaceId { get; set; }
[MapField("PARAM_NAME")]
public string ParamName { get; set; }
[MapField("PARAM_ADDR")]
public string ParamAddr { get; set; }
[MapField("PARAM_TYPE")]
public int ParamType { get; set; }
[MapField("PARAM_DESC")]
public string ParamDesc { get; set; }
}
и Accessor:
public abstract class ParamBindingAccessor : DataAccessor<ParamBinding>
{
[SqlQuery("SELECT * FROM BindingToDump WHERE PLACE_ID = @placeid ORDER BY PLACE_ID, PARAM_NAME")]
public abstract List<ParamBinding> GetList( int placeid );
[SqlQuery("SELECT * FROM BindingToDump WHERE PLACE_ID = @placeid ORDER BY PLACE_ID, PARAM_NAME")]
[Index("PARAM_NAME")]
public abstract Dictionary<string, ParamBinding> GetDict(int placeid);
}
Вопрос — почему GetDict() кидает исключение
"BLToolkit.Mapping.MappingException: Field 'PARAM_NAME' not found." (при том что GetList() работает как ожидается)? Ну и можно ли вообще получить то что я хочу...
Здравствуйте, Odi$$ey, Вы писали:
Судя по файлу ActualTypeAttributeTest.cs строка 58 писать нужно
[Index("@PARAM_NAME")]
... << RSDN@Home 1.2.0 alpha 4 rev. 1238>>
Здравствуйте, Odi$$ey, Вы писали:
OE>OE> [TableName("BindingToDump")]
OE> public class ParamBinding : EntityBase
OE> {
// часть пропущена
OE> [MapField("PARAM_NAME")]
OE> public string ParamName { get; set; }
// часть пропущена
OE> }
OE>
OE>и Accessor:
OE>OE> public abstract class ParamBindingAccessor : DataAccessor<ParamBinding>
OE> {
OE> [SqlQuery("SELECT * FROM BindingToDump WHERE PLACE_ID = @placeid ORDER BY PLACE_ID, PARAM_NAME")]
OE> public abstract List<ParamBinding> GetList( int placeid );
OE> [SqlQuery("SELECT * FROM BindingToDump WHERE PLACE_ID = @placeid ORDER BY PLACE_ID, PARAM_NAME")]
OE> [Index("@PARAM_NAME")]
OE> public abstract Dictionary<string, ParamBinding> GetDict(int placeid);
OE> // или так
OE> [SqlQuery("SELECT * FROM BindingToDump WHERE PLACE_ID = @placeid ORDER BY PLACE_ID, PARAM_NAME")]
OE> [Index("ParamName")]
OE> public abstract Dictionary<string, ParamBinding> GetDict2(int placeid);
OE> }
OE>
см. выделенное жирным.
Как видно из примеров, в одном случае используется @PersonId а в другом ID. Разница в следующем: если не указано "@", то значение берётся из поля уже смапленного объекта, если "@" присутствует, то из исходной записи.
Зачем это надо. Первый случай может пригодиться, если словарь строится по полю, которое явно не отображается на исходную запись. Например, какое-нибудь составное поле в объекте. Второй случай может понадобиться, когда нужно построить словарь по полю, которое есть в исходном рекордсете, но не отображается на объект. Если ключевое поле один в один отображается на объект, то разницы нет.
отсюда, а оригинал где-то на форуме
можно, конечно обучить маппер более гибкому подходу, если надо.
но в общем и целом, если есть "@" то мапит по алиасу, а если нет, то по имени свойства.
Здравствуйте, ili, Вы писали:
ili>Как видно из примеров, в одном случае используется @PersonId а в другом ID. Разница в следующем: если не указано "@", то значение берётся из поля уже смапленного объекта, если "@" присутствует, то из исходной записи.
я почему-то когда доку читал понял с точностью до наоборот
... << RSDN@Home 1.2.0 alpha 4 rev. 1238>>
Здравствуйте, Odi$$ey, Вы писали:
OE>Здравствуйте, ili, Вы писали:
ili>>Как видно из примеров, в одном случае используется @PersonId а в другом ID. Разница в следующем: если не указано "@", то значение берётся из поля уже смапленного объекта, если "@" присутствует, то из исходной записи.
OE>я почему-то когда доку читал понял с точностью до наоборот
да, пожалуй туманно и размыто написано, надо бы поправить