如何使用 Dapper.Contrib 通过唯一键获取实体?

How to Get entity by Unique Key using Dapper.Contrib?

我有对象,假设

public class User
{
    [Key]
    int TheId { get; set; }
    string Name { get; set; }
    int Age { get; set; }
}

TheId 是我的自动递增列,Name 是我的唯一键。保存用户时,我想通过以下方式检查其存在:

var user= connection.Get<User>("John");

但是,因为我的密钥不是Name而是TheId,我不能这样做。如果我将 Name 属性 设置为 [KeyExplicit],那时候我想通过以下方式保存我的用户:

connection.Insert(myUser);

这次dapper expect TheId 属性 由我填写,不让数据库自增

所以,我想知道是否有一种优雅的方法来实现标记某些 属性 或属性以在搜索数据库时考虑到 dapper。我不想按 Guid 搜索,而是按唯一键搜索。

如果我没理解错的话,你愿意Get通过属性而不是密钥。

dapper-contrib 不支持此功能。对于 Get,您应该只使用关键字段。即使 other 属性 是唯一键,这也是不可能的。您正在进行的任何其他调整(在 Name 属性 上设置 [KeyExplicit])都不是处理此问题的正确方法;如您所见,它会产生其他问题。

对于Get具有其他属性,更好的选择是直接使用 Dapper 绕过 Contrib。