C# 有没有办法将属性映射到Dapper中的自定义类型?
我们正在寻找Dapper来简化映射逻辑。除了一件事,它看起来很有希望。我们对ID使用自定义类型。例如: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
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
。在我看来,你过于复杂化了你的模型,但收效甚微。艾米,我们有一个标识接口,使它们能够与复杂的遗留存储库模型一起工作。遗留身份本身可能相当复杂。我正在为新开发创建简单的实体和标识,但它们仍然必须能够在遗留系统中工作。