Simple: you only have one item, and you keep reusing it.
Imagine you have an envelope and into that you place cards, each of which contains a letter of the alphabet.
You place the letter "A" into the envelope and pass it to your mate who notes down the number on the outside of the envelope.
Then you grab it back before he can look at it, and stuff the "B" in there. But ... the envelope can only hold one letter, so you have to remove the "A" first and throw it in the bin. Then you hand the envelope to your mate, who notes down the number on the outside of the envelope.
Then you grab it back before he can look at it, and stuff the "C" in there. But ... the envelope can only hold one letter, so you have to remove the "B" first and throw it in the bin. Then you hand the envelope to your mate, who notes down the number on the outside of the envelope.
This repeats until you have used the "Z".
Your mate looks at his list of envelope numbers, and opens the envelope that matches any one of them - it holds the last letter, and none of the others.
That's what you have done here - you add the same object to your collection each time round the loop, but then you throw away the content in favour of the new.
If you want to add different data each time, you need to create a new instance of your class in _dbListModel each time you go round the loop.
foreach (var items in obj.ListOfItems)
{
_dbListModel = new ... ();
_dbListModel.ItemMainCategory = items.ItemMainCategory;
...