PetaPoco \ NPoco - 部分插入

PetaPoco \ NPoco - Partial Insert

有没有办法使用 PetaPoco 或 NPoco 部分插入对象? 例如,我有一个名为 Users:

的 table
UserId | UserName | UserMail | UserCreationDate

这些列中的每一列都是 NON NULLABLE,并且在留空时具有默认值。

在 ASP.NET 中,我有一个用户 class,我使用 ORM 插入一条只有名称的新记录:

Dim userData As New User()
userData.UserName = "Jimmy Hendrix"
db.Insert(userData)

我希望数据库如下所示:

UserId |   UserName    |   UserMail  | UserCreationDate
  12   | Jimmy Hendrix | (DB default)|  (DB default)

我希望插入命令只插入名称,而不插入具有对象默认值的其他对象属性。

比如有部分更新,我要部分插入。 这在 PetaPoco 中可能吗?

有没有不用ORM的自己做的方法?

编辑:

使用SQL我可以完成工作,但我需要使用 POCO 对象,所以我不想记住数据库参数。我想要类似

的东西
user.UserName = "Michael"
user.Insert(user)

而且它只会插入用户名,忽略其他变量。我要后台生成的SQL是:

"INSERT Users(UserName) VALUES(@UserName)"
(while the @UserName parameter holds the userData.FirstName value)

如您所见,它没有考虑 class 中的其他变量。 今天,如果我使用插入命令,即使我为 class 中的单个 属性 赋值,NPoco 仍会尝试将所有 class 变量插入设置变量的数据库中不想设置 class 的默认值(与数据库默认值不同)

此外,所有属性都是 insertable/updateable,因此 class 中不能有任何 ResultColumn 类型。我想插入这些值,但只插入我在该特定实例中声明的值。所有属性都可用于更新和插入,但对于每个实例,我只插入我声明的内容。

您提供的架构不包含 FirstName 列。

假设列映射到 UserName,使用以下内容应该按预期插入。

dim sql = new Sql("INSERT Users(UserName) VALUES(@0)", userData.FirstName)
db.Execute(sql)

我会创建一个 PartialUserForInsert class:

[TableName("Users")]
public class PartialUserForInsert
{
    public string UserName { get; set; }
}