1

最初にデータベースでEMDXを作成しました。ここで説明するサンプルに従いました。これで、1つのエンティティをデータベース内の複数のテーブルにマップできます。これは正常に機能しています。

しかし、FKがこの1つのエンティティのテーブルに提供するナビゲーションプロパティも必要ですが、どうすればそれを実現できますか?

Carteiraという名前のテーブルとAtivoという名前のテーブルが2つあります。EMDXでは、AtivoのプロパティもCarteiraにあるようにしたいのですが、それらは0:1の関係にあるため、これはすでに実行されており、機能しています。:)しかし、AtivoクラスにあるナビゲーションプロパティをCarteiraに配置したいのですが

プロパティを説明するサンプルを参照してください:

    class Ativo
    {
        public string Id { get; set; }
        public IList<Valor> Valores { get; set; }
    }

    class Carteira
    {
        public string AtivoID { get; set; }
        public Ativo Ativo {get; set;}
    }

だから私はCarteira.Valoresのようなものが
欲しいです(そしてこれはAtivoから推測されるべきです)。

部分クラスを使用してこのコードを手動で作成し、ナビゲーションにアクセスしたくないことに注意してください。すでにこれを実行しており、このアプローチは好きではありません。次のようになります。

    public partial class Carteira
    {
        public List<Valor> Valores
        {
            get
            {
                if (this.Ativo == null)
                    return null;
                return this.Ativo.Valores;
            }
        }
    }

単純なプロパティの場合と同じように、EMDXのみを使用してこれを実現する方法を知りたいのですが、これは可能ですか?

4

2 に答える 2

1

0:1 対 1 の関係の場合、EF では外部キーが従属テーブルの主キーと同じである必要があります。したがって、Ativo クラスには AtivoID と同じ名前の主キーが必要であり、それも外部キーである必要があります。

于 2013-02-06T19:20:05.703 に答える
1

私は2つの異なる方法でナビゲーションを機能させることができました:

1 - モデル (EMDX) で「関連付け」を作成します。 関連付けは、実際の FK であるかのように機能します。両側にマッピング列が既にあるため、これらの手順を実行することで実行できます。

Ativo (第 1 レベル) に存在する FK の同じプロパティを反映する、Carteira (第 2 レベル クラス) で新しい関連付けを作成します。これが完了すると、両方のクラスでナビゲーション プロパティが作成されます。

2- Table-Per-Type 継承の使用

この特定のシナリオでは、クラスは実際に他のクラスから継承し、すべてのナビゲーションを利用できます。これを機能させるには、TBT 継承を実装し、テーブルを変更し、両方のテーブルに「条件付きマッピング」を追加する必要がありました (具体的および継承された) モデル (EDMX)

于 2013-07-03T13:06:43.947 に答える