C# 如何使用Dapper.net扩展忽略类属性?
我使用的是Dapper.net扩展,希望忽略某些属性,而不必编写完整的自定义映射程序。正如您在下面的类映射器中所看到的,当我真正想做的只是忽略一个属性时,存在大量冗余代码。实现这一目标的最佳方式是什么 我喜欢这里提供的答案,但我找不到定义“Write”的名称空间C# 如何使用Dapper.net扩展忽略类属性?,c#,dapper,dapper-extensions,C#,Dapper,Dapper Extensions,我使用的是Dapper.net扩展,希望忽略某些属性,而不必编写完整的自定义映射程序。正如您在下面的类映射器中所看到的,当我真正想做的只是忽略一个属性时,存在大量冗余代码。实现这一目标的最佳方式是什么 我喜欢这里提供的答案,但我找不到定义“Write”的名称空间 public class Photo : CRUD, EntityElement { public Int32 PhotoId { get; set; } public Guid ObjectKey { get; set
public class Photo : CRUD, EntityElement
{
public Int32 PhotoId { get; set; }
public Guid ObjectKey { get; set; }
public Int16 Width { get; set; }
public Int16 Height { get; set; }
public EntityObjectStatus ObjectStatus { get; set; }
public PhotoObjectType PhotoType { get; set; }
public PhotoFormat2 ImageFormat { get; set; }
public Int32 CategoryId { get; set; }
public int SomePropertyIDontCareAbout { get; set; }
}
public class CustomMapper : DapperExtensions.Mapper.ClassMapper<Photo>
{
public CustomMapper()
{
Map(x => x.PhotoId).Column("PhotoId").Key(KeyType.Identity);
Map(x => x.ObjectKey).Column("ObjectKey");
Map(x => x.Width).Column("Width");
Map(x => x.Height).Column("Height");
Map(x => x.ObjectStatus).Column("ObjectStatus");
Map(x => x.PhotoType).Column("PhotoType");
Map(x => x.ImageFormat).Column("ImageFormat");
Map(x => x.CategoryId).Column("CategoryId");
Map(f => f.SomePropertyIDontCareAbout).Ignore();
}
}
公共类照片:CRUD,EntityElement
{
public Int32 PhotoId{get;set;}
公共Guid对象密钥{get;set;}
公共Int16宽度{get;set;}
公共Int16高度{get;set;}
public EntityObjectStatus对象状态{get;set;}
公共PhotoObjectType PhotoType{get;set;}
公共照片格式2图像格式{get;set;}
公共Int32类别ID{get;set;}
public int somepropertyidontcareaabout{get;set;}
}
公共类CustomMapper:DapperExtensions.Mapper.ClassMapper
{
公共CustomMapper()
{
Map(x=>x.PhotoId).Column(“PhotoId”).Key(KeyType.Identity);
Map(x=>x.ObjectKey).Column(“ObjectKey”);
映射(x=>x.Width)。列(“宽度”);
地图(x=>x.Height)。列(“高度”);
Map(x=>x.ObjectStatus).Column(“ObjectStatus”);
映射(x=>x.PhotoType)。列(“PhotoType”);
Map(x=>x.ImageFormat).Column(“ImageFormat”);
Map(x=>x.CategoryId).Column(“CategoryId”);
映射(f=>f.somePropertyIdontCarearout).Ignore();
}
}
WriteAttribute类位于Dapper.Contrib.Extensions
命名空间中,它是Dapper.Contrib项目的一部分。您可以通过nuget添加它,该包名为“Dapper.Contrib”,如中所示,只需调用AutoMap()代码>在您的构造函数中ClassMapper
。例如:
public class CustomMapper : DapperExtensions.Mapper.ClassMapper<Photo>
{
public CustomMapper()
{
Map(x => x.PhotoId).Key(KeyType.Identity);
Map(f => f.SomePropertyIDontCareAbout).Ignore();
AutoMap();
}
}
公共类CustomMapper:DapperExtensions.Mapper.ClassMapper
{
公共CustomMapper()
{
Map(x=>x.PhotoId).Key(KeyType.Identity);
映射(f=>f.somePropertyIdontCarearout).Ignore();
自动映射();
}
}
您可以使用[Computed]装饰属性,插入时将忽略该属性。从语义上讲,它可能并不完美,但似乎起到了作用:
[Computed]
public int SomePropertyIDontCareAbout { get; set; }
再说一遍,彼得·里奇的回答可能更贴切:
[WriteAttribute(false)]
public int SomePropertyIDontCareAbout { get; set; }
Nuget上的Dapper.Contrib包似乎没有更新最新的代码。我已经联系了店主更新了……现在它已经更新了,希望将来能继续更新。这可能会有用的。只是最好执行base.AutoMap()
或将CustomMapper
类标记为sealed
。谢谢[WriteAttribute(false)]
可以缩写为[Write(false)]
。