問題は、最初のオブジェクトが 2 番目のオブジェクトにリンクし、2 番目のオブジェクトが最初のオブジェクトにリンクするように、2 つのオブジェクト間の 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")、問題は解決しませんでした。これを行う正しい方法は何ですか?
それらの1つを作成する[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);
}
}
}