我正在使用Dapper.net Extensions,并且想要忽略某些属性而无需编写完整的自定义映射器。正如您在下面的ClassMapper中看到的那样,当我真正想做的就是忽略一个属性时,会有很多冗余代码。什么是实现这一目标的最佳方式?
我喜欢这里提供的答案https://stackoverflow.com/a/14649356,但我找不到定义'Write'的命名空间。
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();
}
}
答案 0 :(得分:4)
WriteAttribute
类位于Dapper.Contrib.Extensions
命名空间中 - 这是Dapper.Contrib项目的一部分。您可以通过nuget添加该包,该包名为“Dapper.Contrib”
答案 1 :(得分:4)
正如您在Person.cs中看到的那样,只需在AutoMap();
的构造函数中调用ClassMapper
即可。例如:
public class CustomMapper : DapperExtensions.Mapper.ClassMapper<Photo>
{
public CustomMapper()
{
Map(x => x.PhotoId).Key(KeyType.Identity);
Map(f => f.SomePropertyIDontCareAbout).Ignore();
AutoMap();
}
}
答案 2 :(得分:4)
您可以使用[Computed]修饰属性,插入时将忽略该属性。在语义上它可能不完美,但它似乎做了这个工作:
[Computed]
public int SomePropertyIDontCareAbout { get; set; }
然后,Peter Ritchie的回答可能会更加明确:
[WriteAttribute(false)]
public int SomePropertyIDontCareAbout { get; set; }