Проблема в том, что я не могу понять, как сделать отношение OneToOne между двумя объектами таким образом, чтобы первый объект имел ссылку на второй, а второй - на первый. Вот код:
[MapTo("Model")]
public class Model : CSObject<Model, int>
{
[OneToOne(LocalKey = "ModelID", ForeignKey = "ModelID")]
public Product Product { get { return (Product)GetField ("Product"); } set { SetField ("Product", value); } }
}
[MapTo("Product")]
public class Product : CSObject<Product, int>
{
[OneToOne(LocalKey = "ProductID", ForeignKey = "ProductID")]
public Model Model { get { return (Model)GetField ("Model"); } set { SetField ("Model", value); } }
}
Дело в том, что когда я создаю продукт и модель и устанавливаю свойство модели «Продукт» в созданное и сохраняю его, свойство продукта «Модель» не устанавливается и остается NULL. Я уже пытался сделать все локальные и внешние ключи для свойств продукта и модели одинаковыми (например, «ModelID»), но это не решило проблему. Каков правильный способ сделать это?
Я предполагаю, что создание одного из них [OneToMany]
добьется цели, но вернет коллекцию, в то время как мне нужно, чтобы один объект возвращался свойством.
Обновить
Вот простое решение, которое можно было бы назвать костылем:
[OneToMany]
public CSList<Product> _ProductList { get { return (CSList<Product>)GetField ("_ProductList"); } set { SetField ("_ProductList", value); } }
[NotMapped]
public Product Product {
get {
CSList<Product> list = this._ProductList;
if (list.Count > 0)
return list [0];
return null;
}
set {
if (value != null) {
CSList<Product> list = this._ProductList;
list.RemoveAll ();
list.Add (value);
}
}
}