5

我知道我可以使用纯 dapper 来构建我的更新字符串,其中只包含我想要更新的属性(白名单)。

我想要的是保持 dapper 扩展的 ORM 风格:

con.Update<Person>(person);

我希望不更新人的某些属性(黑名单)

如何在运行 .Update 扩展方法时排除属性被更新?

您是否知道更好的 .Update 样式的 .Update 扩展?(那我不必

写下来 ;-)

4

3 回答 3

1

您可以尝试为此使用单独的类(例如, Person 的后代或使用忽略该属性的单独映射器围绕它的包装器)。

但这太丑陋了,不能成为一个好的解决方案。

DapperExtensions 目前对于除了明确的 CRUD 任务之外的任何事情都太简单了。我必须开发一个自定义映射器来添加 System.ComponentModel 注释支持,这对于 2015 年来说似乎很荒谬。

但是添加一个新的 UpdatePartial 扩展方法看起来是个好主意。

于 2015-03-15T13:15:20.833 回答
1

在相关类型的 ClassMapper 中,执行以下操作:

public MyTableMapper()
{
    Table("MyTable");
    Map(f => f.MyCalculatedField).ReadOnly();
}
于 2014-01-17T17:34:21.430 回答
1

只需定义一个PersonMapper继承自ClassMapper<Person>并用于Ignore()映射要排除的列。

请参见下面的示例(来源:github 测试 Dapper Extensions),其中排除了Phones属性 ( )。IEnumerable<Phone> Phones

using System;
using System.Collections.Generic;
using DapperExtensions.Mapper;

namespace DapperExtensions.Test.Data
{
    public class Person
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime DateCreated { get; set; }
        public bool Active { get; set; }
        public IEnumerable<Phone> Phones { get; private set; }
    }

    public class Phone
    {
        public int Id { get; set; }
        public string Value { get; set; }
    }

    public class PersonMapper : ClassMapper<Person>
    {
        public PersonMapper()
        {
            Table("Person");
            Map(m => m.Phones).Ignore();
            AutoMap();
        }
    }
}
于 2013-11-06T21:27:23.780 回答