Reputation: 6363
Nuget: ServiceStack.4.0.25 ServiceStack.OrmLite.4.0.25 ServiceStack.OrmLite.PostgreSQL.4.0.25
Given this Schema
-- ----------------------------
-- Table structure for loan_application
-- ----------------------------
DROP TABLE IF EXISTS "public"."loan_application";
CREATE TABLE "public"."loan_application" (
"row_id" int4 DEFAULT nextval('loan_application_row_id_seq'::regclass) NOT NULL,
"first_name" char(50) COLLATE "default",
"last_name" char(50) COLLATE "default"
)
WITH (OIDS=FALSE)
;
-- ----------------------------
-- Alter Sequences Owned By
-- ----------------------------
-- ----------------------------
-- Primary Key structure for table loan_application
-- ----------------------------
ALTER TABLE "public"."loan_application" ADD PRIMARY KEY ("row_id");
and these dtos
[Route("/loanapplication", "POST")]
public class LoanApplication
{
[AutoIncrement]
public int RowId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class LoanApplicationResponse
{
public int Id { get; set; }
public ResponseStatus ResponseStatus { get; set; }
}
used by this service
public class LoanApplicationService : Service
{
public DataRepository DataRepository { get; set; }
public object Any(LoanApplication request)
{
var id = DataRepository.AddEntry(request);
return new LoanApplicationResponse { Id = id };
}
}
public class DataRepository
{
public IDbConnectionFactory DbConnectionFactory { get; set; }
public int AddEntry(LoanApplication loanApplication)
{
using (var db = DbConnectionFactory.OpenDbConnection())
{
< UPDATE >
db.Insert(loanApplication, true); // wrong way
db.Save(loanApplication);// correct way
return loanApplication.RowId;
}
}
}
I am unable to retrieve the id after insert. I've tried passing true and false as the second param and neither return the id.
Thank you, Stephen
Upvotes: 0
Views: 2352
Reputation: 143319
See this previous answer on how to retrieve automatically inserted ids, e.g:
You can either use db.Save()
to automatically populate the AutoIncrement Id, e.g:
db.Save(loanApplication);
loanApplication.Id //populated with the auto-incremented id
Otherwise you can select the last insert id using:
var itemId = db.Insert(loanApplication, selectIdentity:true);
Note: selectIdentity:true
just returns the auto-incremented id, it does not modify the loanApplication, this is what db.Save()
does.
Upvotes: 4