CoolStorage无法设置一对一的关系

时间:2013-01-23 08:49:43

标签: orm one-to-one 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); } }
}

当我创建产品和模型并将模型的属性“Product”设置为创建的属性并保存时,产品的“Model”属性不会被设置并保持为NULL。我已经尝试为Product和Model的属性设置所有本地和外键(例如“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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你可以建立两种关系[ManyToOne]。这将适用于您的场景。