PreserveIds using inheritance id db auto incrementing
I would change implementation if Id property in both your models into:

public class StatesModel
{
    private int id;

    public int Id
    {
        get
        {
            return id;
        }
        set
        {
            id = value;

            if (OriginalId == 0)
                OriginalId = value;
        }
    }

    public int OriginalId { get; private set; }

    // (...)
}

// The same for CityModel


and remove your PreserveIds method all together. You can also add private setter to OriginalId just to make sure that nobody would override this value.