0

次のPOCOをご覧ください。

public class Country
{
    [Key]
    public Guid ID { get; set; }

    [Required]
    public virtual Currency Currency { get; set; }
}

public class Currency1
{
    [Key]
    public Guid ID { get; set; }

    public virtual ICollection<Country> Countries { get; set; }
}

public class Currency2
{
    [Key]
    public Guid ID { get; set; }
}

Currency1のICollectionのようなナビゲーションプロパティが何のために必要か正確にはわかりません。EF CodeFirstに関しては、作成されたデータベース構造に違いは見られません。Currency1とCurrency2のテーブルは、私にはほとんど同じように見えます。では、なぜ、またはいつこのプロパティを追加するのが理にかなっているのでしょうか。

もちろん、POCOについて考えるだけで、Currency2オブジェクトからどの国にもアクセスできないことを理解しています。例えば:

        var a = currency1.Countries;    // works fine
        var b = currency2.Countries;    // does not even compile

しかし、これが唯一の違いですか?言い換えると、Currency2オブジェクトから国にアクセスする必要がない場合、EFの目的でCurrency2クラスに対応するナビゲーションプロパティを追加する必要はありませんか?ここでちょっと混乱しています...

4

1 に答える 1

1

ナビゲーションプロパティは、(説明したように)直接アクセスまたはlinq-to-entitiesクエリのいずれかで使用されます。使用する予定がない場合は、モデルから削除できます。コードファーストアプローチを使用してデータベースの実現をモデル化できるようにするには、少なくとも片側にナビゲーションプロパティが必要であることに注意してください。

于 2011-03-23T09:53:23.203 に答える