2013-01-23 37 views
1

問題是我無法理解如何在兩個對象之間創建OneToOne關係第一個對象具有第二個和第二個對象的鏈接的方式有第一個鏈接。下面的代碼:CoolStorage無法設置一對一的關係

[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); 
     } 
    } 
} 

回答

0

可以使雙方關係[多對一。這將適用於你的情況。

+0

恐怕這不起作用。 ManyToOne模式意味着在表格中持有一列「多」,持有「一」的ID。這意味着我們必須在Model表中有一個ProductID列,反之亦然。當我們將Product的Model屬性設置爲某個模型時,我們更新Product表的列「ModelID」,但Model表的「ProductID」列保持不變。此外,這種方法在嘗試保存時可能會導致錯誤,因爲它似乎是一個無限循環。 – Danchoys