C# Dapper忽略属性运行时

C# Dapper忽略属性运行时,c#,.net,dapper,dapper-contrib,C#,.net,Dapper,Dapper Contrib,是否有一种方法可以忽略在运行时映射的属性。因为我不知道数据库是否有特定的列,所以我必须在执行insert之前检查它。若数据库并没有列,那个么我想忽略这一特定属性 更新: 这是我的插入代码 public static void Insert(string connectionString, T entity) { using (var connection = new SqlConnection(connectionString)) {

是否有一种方法可以忽略在运行时映射的属性。因为我不知道数据库是否有特定的列,所以我必须在执行insert之前检查它。若数据库并没有列,那个么我想忽略这一特定属性

更新:

这是我的插入代码

    public static void Insert(string connectionString, T entity)
    {
        using (var connection = new SqlConnection(connectionString))
        {
            connection.Open();

            connection.Insert(entity);
        }
    }
Insert方法是的一部分,而不是Dapper本身。正如该库的自述文件所解释的,您可以使用[WriteValse]属性指定属性不可写,例如:

public class MyClass
{
    public int ID {get;set;}

    public DateTime Created{get;set;}

    [Write(false)]
    public DateTime CreatedDate =>Created.Date;

}
源代码显示Dapper.Contrib只是:

Dapper是一种微型ORM,它不提供EF或NHibernate等完整ORM中的映射功能。Contrib通过5个属性添加了一些助手方法和非常基本的映射:

[TableName]来指定表名 [键]标记自动生成的键字段 [ExplicitKey]标记非自动生成的字段 [WriteRue/false]标记不可写属性 [Computed]标记计算属性。
例如,没有办法指定列名

是的,但在我的例子中,手动编写插入项的风险更大。有时我需要忽略一个属性。但这意味着我应该在运行时将[WriteRue]更改为[WriteValse]吗?您询问了如何排除属性,而不是动态检测它是否存在并忽略它。即使是全功能的ORM也不能做到这一点。如果使用像EF或NH这样的ORM处理缺少字段的表,您将得到一个错误。要使用EF执行要求的操作,请在启动时检查数据库模式,如果没有找到,请在列配置中添加一个Ignore。那不是整洁的for@AmitJoshi仅在更新时忽略计算。Write表示完全忽略该属性。如果您检查源代码,您将看到计算属性被处理,而不可写属性被忽略completely@PanagiotisKanavos:我做了进一步的研究,并相应地更新了我的答案。在插入和更新时,Computed属性也将忽略该属性。如果我的测试不正确,请查看并提出建议。
var properties = type.GetProperties().Where(IsWriteable).ToArray();