.net mvc3 один к одному

Я новичок в .net mvc. Я пытаюсь создать модель с отношением один к одному к другой модели.

Я хотел бы иметь возможность отображать информацию только для чтения на страницах редактирования для каждой модели о ее отношении один к одному.

Вот мой код:

public class Thing1 : BaseEntity
{
    public virtual Thing2 thing2 { get; set; }
    [Required(ErrorMessage = "This field is required.")]
    public int Thing2ID { get; set; }

    ... Other basic fields go here
}

public class Thing2 : BaseEntity
{

    ...basic fields
}

Базовые поля представляют собой обычные нереляционные поля.

Теперь с помощью этой модели легко отобразить данные Вещи 2 в форме Вещи 1, но как отобразить данные Вещи 1 в форме Вещи 2? Есть ли что-то, что я добавляю в модель Thing2, чтобы связать ее с Thing1?

Предыстория: сначала я использую mvc3 с кодом объекта и бритвой.


person lovefaithswing    schedule 16.09.2011    source источник


Ответы (1)


Вероятно, проще всего было бы добавить новое свойство в Thing2 для отношения, сделав его двунаправленным отношением "один к одному".

e.g.

public class Thing2 : BaseEntity
{
    public virtual Thing2 Thing2 { get; set; }
    ...basic fields
}

Затем вам нужно убедиться, что вещь 1 и вещь 2 не рассинхронизированы. Вы можете сделать это примерно так:

public class Thing1 : BaseEntity
{        
    private Thing2 thing2;
    public virtual Thing2 Thing2 { get { return thing2; }  }    

    public void SetThing2(Thing2 thing2)
    {
       this.thing2 = thing2;
       thing2.SetThing1(this);

    }

}

public class Thing2 : BaseEntity
{
    private Thing1 thing1;
    public virtual Thing1 Thing1 { get { return thing1; }  }    

    public void SetThing1(Thing1 thing1)
    {
       this.thing1 = thing1;
       thing1.SetThing2(this);
    }
}

(извините за опечатку, но мысль вы поняли)

Таким образом, вы можете перейти Thing1.SetThing2(myThing2) (и наоборот), и оба свойства будут установлены.

Без такой настройки (т. е. сделать свойства доступными только для чтения и создать удобный метод для одновременной установки обоих свойств) вы рискуете рассинхронизировать объекты друг с другом, поэтому Вещь 1 может ссылаться на Вещь 2 без этой Вещи 2. ссылаясь на Вещь1.

person StanK    schedule 16.09.2011