Проблемът е, че не мога да разбера как да направя релация 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);
}
}
}