Witam serdecznie, to znowu ja :D

Mam problem z zapisem obiektu, który ma obiekt dziecko i obiekt wnuka do bazy.

Są 3 obiekty:
User
UserData
City

(nie sugerujcie się kodem co do CITY, bo próbowałem najróżniej, po prostu taki zostawiłem niedziałający)

I teraz tak, UserEntity wygląda następująco:

public class UserEntity : BaseEntity
    {
        public virtual string Password { get; set; }
        public virtual string Email { get; set; }
        public virtual UserDataEntity UserData { get; set; }
    } 

UserDataEntity:

public class UserDataEntity  : BaseEntity
    {
        public virtual UserEntity User { get; set; }
        public virtual CityEntity City { get; set; }

        public UserDataEntity()
        {
            City = new CityEntity();
        }
    } 

Mapowanie UserEntity:

public class UserMap: ClassMap<UserEntity>
    {
        public UserMap()
        {
            Schema("\"MyPuppy\"");
            Table("\"User\"");

            Id(x => x.ID).Column("id");
            Map(x => x.Password).Column("password").Nullable();
            Map(x => x.Email).Column("email").Nullable();
            HasOne(x => x.UserData).LazyLoad().ForeignKey("fk_user").Cascade.All();
        }
    } 

Mapowanie UserDataEntity:

 
public class UserDataMap : ClassMap<UserDataEntity>
    {
        public UserDataMap()
        {
            Schema("\"MyPuppy\"");
            Table("\"User_Data\"");            

            Id(x => x.ID).Column("id");
            References(x => x.User).LazyLoad().Column("fk_user").Unique();
            References(x => x.City).LazyLoad().Column("fk_city").Unique();
            //HasOne(x => x.City).LazyLoad().ForeignKey("fk_city").Cascade.All();
        }
    }

W controlerze (operuję na obiektach DTO, później automaper wrzuca je do Entity, wszystkie dane się zgadzają):

[HttpPost]
        [AllowAnonymous]
        public ActionResult Register(UserDTO newUser, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                newUser.UserData.User = newUser;
                newUser.UserData.City.UserData = newUser.UserData;
                try
                {
                    _userService.Save(newUser);
                } 

To działa, UserData i User mają wpisy w bazie, UserData zawiera FK do User i jest ok
W bazie wygląda to tak:
User ma ID
UserData ma ID i FK_USER


Teraz kwestia City i tu jest trochę inaczej, sytuacja jest odwrócona jeśli chodzi o bazę (nie wiem czy może tak być czy powinno być tak jak w User -> UserData) UserData ma FK do obiektu podrzędnego czyli City:

UserData ma FK_CITY
City ma ID

CityEntity:

 
public class CityEntity : BaseEntity
    {
        public virtual UserDataEntity UserData { get; set; }
        public virtual string Name { get; set; }
        public virtual string Code { get; set; }
    }

CityMap:

 
public class CityMap : ClassMap<CityEntity>
    {
        public CityMap()
        {
            Schema("\"MyPuppy\"");
            Table("\"City\"");
            LazyLoad();
            Id(x => x.ID).Column("id");            
            Map(x => x.Name).Column("name").Nullable();
            Map(x => x.Code).Column("code").Nullable();
            HasOne(x => x.UserData).LazyLoad().ForeignKey("fk_city").Cascade.All();
            //References(x => x.UserData).LazyLoad().Column("fk_city").Unique();
        }
    }

Nie wiem jak to powinno wyglądać prawidłowo. Czy mam zmienić strukturę bazy i wrzucić FK_USER_DATA do tabeli City i zrobić adekwatnie do User -> UserData. Czy może da się zrobić to z aktualną strukturą tylko totalnie spieprzyłem mapowanie.

Proszę bardzo o pomoc.