首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CoolStorage不能建立一对一的关系

CoolStorage不能建立一对一的关系
EN

Stack Overflow用户
提问于 2013-01-23 08:49:42
回答 1查看 73关注 0票数 1

问题是,我无法理解如何在两个对象之间建立一个OneToOne关系,即第一个对象具有到第二个对象的链接,而第二个对象具有到第一个对象的链接。下面是代码:

代码语言:javascript
复制
[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”属性不会被设置,并且仍然是空的。我已经试过让产品的属性和Model的属性的所有本地和外键都相同。( "ModelID")但是它没有解决这个问题。怎样才是正确的方法?

我猜让其中之一[OneToMany]可以完成这个任务,但是当我需要一个属性返回一个对象时,它会返回一个集合。

更新

这里有一个简单的解决方案,人们称之为拐杖:

代码语言:javascript
复制
[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);
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-01-23 10:24:58

你可以使这两种关系ManyToOne。这在你的场景中是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14475606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档