如何使用 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。
我有对象,假设
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。