PetaPoco \ NPoco - 部分插入

时间:2015-09-24 09:59:12

标签: asp.net vb.net insert petapoco micro-orm

有没有办法使用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)

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

如有部分更新,我想要部分插入。 PetaPoco有可能吗?

在没有任何ORM的情况下,我自己有另一种方式吗?

修改

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

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

它只会插入UserName,忽略其他变量。我想在后台生成的SQL是:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

我会创建一个PartialUserForInsert类:

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