C# 有没有办法将属性映射到Dapper中的自定义类型?

C# 有没有办法将属性映射到Dapper中的自定义类型?,c#,dapper,C#,Dapper,我们正在寻找Dapper来简化映射逻辑。除了一件事,它看起来很有希望。我们对ID使用自定义类型。例如: public class MyEntityIdentity { public int IdentityValue { get; } public MyEntityIdentity(int identity) { IdentityValue = identity; } } public class MyEntity { public MyEntityIdentity

我们正在寻找Dapper来简化映射逻辑。除了一件事,它看起来很有希望。我们对ID使用自定义类型。例如:

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”属性?

您可以使用如下自定义类型处理程序:

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());

您的my_entity_id仍然是一个int,因此您应该直接将其映射为int。拥有该实体有什么用途?您的ID是一个
int
。在我看来,你过于复杂化了你的模型,但收效甚微。艾米,我们有一个标识接口,使它们能够与复杂的遗留存储库模型一起工作。遗留身份本身可能相当复杂。我正在为新开发创建简单的实体和标识,但它们仍然必须能够在遗留系统中工作。