0

私は定期的に次の構造を持っています:

MyClass
public virtual ICollection<Version> Versions { get; set; }
public virtual Version CurrentVersion { get; set; }

つまり、もののリストがあり、いくつかのクラスの両方がそのリストと、そのリスト内の 1 つの特定のアイテム (多くのバージョンの現在のバージョン、イベントのリスト内の次のイベントなど) を指しています。

私のスキーマでは、バージョンから MyClass を指す外部キーを最終的に作成したいと考えています。これで十分に機能します。しかし、MyClass から CurrentVersion プロパティを表すバージョンを指す外部キーが必要です。Foreign Key が戻ってくることはありません。余分なストレージが必要なわけではなく、CurrentVersion が何の MyClass であるかを Version に伝える手間も必要ありません。別の言い方をすれば、この 2 番目の関係は、たとえ 1 対 1 であっても、MyClass から Version への一方向であってほしいと思います。

代わりに EF Code First が提供するのは、Version から MyClass への FK を使用した最初のプロパティの通常の 1 対多ですが、2 番目のプロパティの FK が両方向を指している完全な 1 対 1 の関係です。そのため、Version の基になるスキーマは最終的に MyClass_Id と MyClass_Id1 になります。

では、Fluent API に頼らずに EF Code First で一方向の関係を取得する方法はありますか? おそらく System.ComponentModel.DataAnnotations.Schema.InverseProperty がそれを狙っているように見えましたが、「生成しないでください」と言う方法を提供しているようには見えませんでした。

4

1 に答える 1

0

重要なのは、逆方向を指すプロパティに InverseProperty を指定することです。これにより、EF は、1 対 1 ではなく、多対多であることを認識します。

public class MyClass
{
    public int Id { get; set; }

    public Version CurrentVersion { get; set; }

    public ICollection<Version> Versions { get; set; }
}

public class Version
{
    public int Id { get; set; }

    [InverseProperty("Versions")]
    public Versioned Versioned { get; set; }
}
于 2013-03-30T09:42:06.097 に答える