CoolStorage не може да зададе връзка "един към един".

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

person Danchoys    schedule 23.01.2013    source източник


Отговори (1)


Можете да направите и двете отношения [ManyToOne]. Това ще работи във вашия сценарий.

person Philippe Leybaert    schedule 23.01.2013
comment
Страхувам се, че това няма да проработи. Моделът ManyToOne предполага наличието на колона, която се съхранява в таблицата, която е много, съдържаща id на One. Това означава, че трябва да имаме колона ProductID в таблицата Model и обратно. Когато зададем свойството Model на продукта на някакъв модел, актуализираме колоната ModelID на таблицата на продукта, но колоната ProductID на таблицата на модела остава недокосната. Освен това такъв подход може да причини грешки при опит за запазване, тъй като изглежда, че това е безкраен цикъл. - person Danchoys; 23.01.2013