Есть ли способ частично вставить объект с помощью PetaPoco или NPoco? Например, у меня есть таблица пользователей:PetaPoco NPoco - Partial Insert
UserId | UserName | UserMail | UserCreationDate
Каждая из этих столбцов являются NON NULLABLE и имеет значение по умолчанию, когда они пусты.
В ASP.NET У меня есть класс User, и я использую ОРМ, чтобы вставить новую запись только с именем:
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?
Edit:
Использование SQL я могу получить работу, но мне нужно использовать объекты POCO, так что я не хочу, чтобы запомнить параметры базы данных. Я хочу что-то вроде
user.UserName = "Michael"
user.Insert(user)
И он будет вставлять только имя пользователя, игнорируя другие переменные. SQL, что я хочу быть сгенерированы в фоновом режиме:
"INSERT Users(UserName) VALUES(@UserName)"
(while the @UserName parameter holds the userData.FirstName value)
Как вы можете видеть, он не принимает во внимание другие переменные в классе. Сегодня, если я использую команду insert, даже если я даю значение одному свойству в классе, NPoco по-прежнему пытается вставить ВСЕ переменные класса в настройку db, переменные, которые я не хотел устанавливать с помощью значений по умолчанию класса (которые отличаются от значений по умолчанию db)
Кроме того, все свойства могут быть вставлены/обновлены, поэтому в классе не может быть типов ResultColumn. Я хочу вставить эти значения, но только те, которые я объявляю в этом конкретном экземпляре. Все свойства доступны для обновления и вставки, но для каждого экземпляра я вставляю только то, что объявляю.
Это заставит меня создать класс для каждого обновления вставки, которое я делаю в системе. Это вызовет в тысячах подобных классов. Я не знаю, в каких полях я буду вставлять каждый вызов, и я бы не хотел, чтобы меня заставляли создавать несколько классов вроде этого. –
Я думаю, что это ваш единственный вариант, кроме ответа @ CallMeKags ниже. Я знаю, что число db-слоев сначала увлажнит объект модели с помощью оператора select, чтобы убедиться, что состояние модели текущее до выполнения обновления. Может быть, вы могли бы использовать этот подход? – CharlieK
Btw, ваше приложение звучит очень сложно, если у вас есть тысячи частичных шаблонов вставки/обновления. Есть ли в вашей системе 1000+ таблиц? – CharlieK