Есть ли способ сопоставить свойство с пользовательским типом в Dapper? - PullRequest
0 голосов
/ 16 ноября 2018

Мы смотрим на Dapper, чтобы упростить нашу логику отображения.Это выглядит довольно многообещающе за исключением одной вещи.Мы используем пользовательские типы для наших идентификаторов.Например:

public class MyEntityIdentity 
{
    public int IdentityValue { get; }
    public MyEntityIdentity(int identity) { IdentityValue = identity; }
}

public class MyEntity
{
    public MyEntityIdentity Identity { get; set; }
    int Prop1 { get; set; }
    string Prop2 { get; set; }
    bool Prop3 { get; set; }
}

Если таблица SQL выглядит примерно так:

create table [dbo].[MyEntity] (
    my_entity_id int identity(1,1) NOT NULL,
    prop1 int NULL,
    prop2 varchar(100) NULL,
    prop3 bit NOT NULL

    CONSTRAINT PK_MyEntity PRIMARY KEY CLUSTERED (my_entity_id ASC)
)

Как мы можем отобразить свойство "Identity"?

1 Ответ

0 голосов
/ 17 ноября 2018

Вы можете использовать обработчик пользовательского типа следующим образом:

public class IdentityHandler : SqlMapper.TypeHandler<MyEntityIdentity>
{
    public override MyEntityIdentity Parse(object value)
    {
        return new MyEntityIdentity((int)value);
    }

    public override void SetValue(IDbDataParameter parameter, MyEntityIdentity value)
    {
        parameter.Value = value.IdentityValue;
    }
}

И зарегистрировать его так:

SqlMapper.AddTypeHandler(new IdentityHandler());
...