Zonder entiteitsframework moet u de code schrijven die de waarden uit de datareader leest in een instantie van uw AccountInfo klas:
public static AccountInfo GetAccountInfo(string accountNumber)
{
AccountInfo result = null;
using(var conn = new NpgsqlConnection("..."))
{
conn.Open();
using(var command = new NpgsqlCommand("SELECT * FROM sms.get_accounts_info(@AccountNumber); ", conn))
{
command.Parameters.AddWithValue("@AccountNumber", accountNumber);
using(var dr = command.ExecuteReader())
{
if(dr.HasRows && dr.Read())
{
result = new AccountInfo {
accountNumber = dr["accountNumber"].ToString(),
balance = dr["balance"].ToString(),
interestRate = Convert.ToInt32(dr["interestRate"]),
accountName = dr["accountName"].ToString()
};
}
}
}
}
return result;
}
Merk op dat het retourtype van de functie is gewijzigd in AccountInfo , eerder string. Het is ook beperkt tot het lezen van slechts één record, als één aanroep naar sms.get_accounts_info meer dan één record zou kunnen retourneren, is een ander verhaal. Ik ging er gewoon vanuit dat account_number is een primaire sleutel in de account_holders tafel.
Sommige details hebben uw aandacht nodig, bijvoorbeeld balance is geld in de database, maar string in de klas. Ook wist ik niet of en hoe product (database) en accountType (klas) zou overeenkomen, dus heb ik het weggelaten.
Databaseverbindingen, opdrachten en datalezers zijn IDisposable en moet worden ingepakt in using blokken.