2013-01-23 2 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] 
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

당신은 둘의 관계 [ManyToOne]을 만들 수 있습니다

업데이트

여기에 하나가 목발을 부를 것이다 간단한 솔루션을 제공됩니다. 그것은 당신의 시나리오에서 작동합니다.

+0

두려워서 작동하지 않습니다. ManyToOne 패턴은 "One"이라는 ID를 가진 "Many"테이블에 열을 보유한다는 의미입니다. 즉 Model 테이블에 ProductID 열이 있어야하며 그 반대의 경우도 마찬가지입니다. Product의 Model 속성을 일부 모델로 설정하면 Product 테이블의 Column "ModelID"가 업데이트되지만 Model 테이블의 "ProductID"열은 그대로 유지됩니다. 더욱이 그러한 접근은 무한 사이클 인 것처럼 저장하려고 할 때 오류를 유발할 수 있습니다. – Danchoys

관련 문제