1

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

UserId | UserName | UserMail | UserCreationDate

这些列中的每一列都是 NON NULLABLE 并且当它们为空时具有默认值。

在 ASP.NET 中,我有一个 User 类,我使用 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)

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

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

4

2 回答 2

1

我会创建一个 PartialUserForInsert 类:

[TableName("Users")]
public class PartialUserForInsert
{
    public string UserName { get; set; }
}
于 2015-11-03T17:59:13.580 回答
1

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

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

dim sql = new Sql("INSERT Users(UserName) VALUES(@0)", userData.FirstName)
db.Execute(sql)
于 2015-09-28T13:29:37.477 回答