Я новичок в .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 с кодом объекта и бритвой.
Ответ 1 · рейтинг 1 · StanK
Вероятно, проще всего было бы добавить новое свойство в 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.