Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Dapper.net扩展忽略类属性?_C#_Dapper_Dapper Extensions - Fatal编程技术网

C# 如何使用Dapper.net扩展忽略类属性?

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

我使用的是Dapper.net扩展,希望忽略某些属性,而不必编写完整的自定义映射程序。正如您在下面的类映射器中所看到的,当我真正想做的只是忽略一个属性时,存在大量冗余代码。实现这一目标的最佳方式是什么

我喜欢这里提供的答案,但我找不到定义“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();
    }
}
公共类照片: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)]