2

複数の 1 対 1 の関係を同じテーブル (sqlite-net-extensions) にモデル化する最良の方法はどれですか? 私はこのような解決策を探しています:

Class WayBill 
{
    [PrimaryKey, AutoIncrement]
    public int Id {get; set;} 

    [ForeignKey(typeof(Organization ))]
    public int ConsignerId {get; set;}

    [OneToOne]
    public Organization Consigner {get; set;}  

    [ForeignKey(typeof(Organization ))]
    public int ConsigneeId {get; set;}

    [OneToOne]
    public Organization Consignee {get; set;} 
}


Class Organization 
{
    [PrimaryKey, AutoIncrement]
    public int Id {get; set;} 

    public string Name {get; set;}
}    

明らかに、上記は機能しません。

他のオプションも検討しました:

  1. 組織の役割を取得するテーブル (WayBillOrganization) を作成します: Waybill -->> WayBillOrganization --> Organization

  2. 必要な逆 OneToMany プロパティを組織に配置します。

  3. 手動で処理します (つまり、WayBill クラスに主キーのみを保存し、組織を個別にロードします)。

オプション 2. は避けたいものです。組織は非常に多くの他のクラス (私の例ではありません) に関連しており、運送状の場合でも、例に含めなかった関係がいくつかあります (運送業者、貨物支払者、運送業者など)。その上、ナビゲートする必要がある場合にのみ逆プロパティを使用したいと思います (たとえば、運送状を見つけるために組織を使用しないため、逆プロパティは余分な負担になるだけです)。

オプション 3. もそれほど魅力的ではありません。

したがって、オプション1.が進むべき道のようです。しかし、そこに行く前に、私の例での完璧な世界の解決策が実際に不可能かどうかを知りたい.

だから、私の質問は次のとおりです。明示的に逆のプロパティを宣言せずに、複数の一方向のOneToOne 関係をモデル化する方法はありますか?

4

1 に答える 1