问题是,我无法理解如何在两个对象之间建立一个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”属性不会被设置,并且仍然是空的。我已经试过让产品的属性和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);
}
}
}发布于 2013-01-23 10:24:58
你可以使这两种关系ManyToOne。这在你的场景中是可行的。
https://stackoverflow.com/questions/14475606
复制相似问题