0

有没有办法在运行时忽略属性映射。因为我不知道数据库是否有特定的列,我必须在插入之前检查它。如果数据库没有列,那么我想忽略这一特定属性。

更新:

这是我的插入代码

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

            connection.Insert(entity);
        }
    }
4

1 回答 1

1

Insert方法是Dapper.Contrib的一部分,而不是 Dapper 本身。正如该库的自述文件所解释的那样,您可以使用该[Write(false)]属性来指定属性不可写,例如:

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

    public DateTime Created{get;set;}

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

}

源代码显示 Dapper.Contrib 只是忽略了不可写的属性

var properties = type.GetProperties().Where(IsWriteable).ToArray();

Dapper 是一个 microORM,它不提供像 EF 或 NHibernate 这样的完整 ORM 中的映射功能。Dapper.Contrib 通过 5 个属性添加了一些辅助方法和非常基本的映射:

  • [Table("Tablename")]指定表名
  • [Key]标记自动生成的关键字段
  • [ExplicitKey]标记不是自动生成的字段
  • [Write(true/false)]标记(非)可写属性
  • [Computed]标记计算的属性。

例如,无法指定列名

于 2019-09-11T11:30:53.310 回答