Address a = new Address ();
Это создает новый экземпляр Address. Он никак не связан с текстом данных.
db.StateProvinces.First ();
Это загружает экземпляр StateProvince. Экземпляр отслеживается по текстовому тексту, который его загрузил (дБ). БД ожидает уведомлений об изменениях из этого экземпляра.
a.StateProvince =
Вот присвоение собственности. Если вы проверите автоматически сгенерированное свойство «StateProvince», то увидите, что оно также обновляет связанное свойство «Адреса» в экземпляре StateProvince. Теперь экземпляр StateProvince изменился. Это приводит к тому, что db получает уведомление, и в результате - экземпляр адреса теперь отслеживается db как новый, готовый к вставке экземпляр.
Простейшим выходом из этого является, перед использованием db, установить:
db.ObjectTrackingEnabled = false;
PS. вар классный, как хот-доги классные.