【问题标题】:CoolStorage can't set One-To-One relationshipCoolStorage 无法设置一对一关系
【发布时间】:2013-01-23 19:06:28
【问题描述】:

问题是我无法理解如何在两个对象之间建立 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);
        }
    }
}

【问题讨论】:

    标签: orm one-to-one coolstorage


    【解决方案1】:

    您可以建立两种关系 [ManyToOne]。这将适用于您的方案。

    【讨论】:

    • 恐怕这行不通。 ManyToOne 模式意味着在表中保存一列,该列是“Many”,其 id 为“One”。这意味着我们必须在 Model 表中有一个 ProductID 列,反之亦然。当我们将 Product 的 Model 属性设置为某个模型时,我们会更新 Product 表的“ModelID”列,但 Model 表的“ProductID”列保持不变。此外,这种方法在尝试保存时可能会导致错误,因为它似乎是一个无限循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多