实体框架导航属性的确切目的

时间:2011-03-23 09:37:01

标签: entity-framework ef-code-first navigation-properties

请看下面的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类中添加相应的导航属性?有点困惑......

1 个答案:

答案 0 :(得分:1)

导航属性既可用于直接访问(如您所述),也可用于linq-to-entities查询。如果您不打算使用它,可以将其从模型中删除。请注意you need a navigation property on at least one side能够使用代码优先方法为数据库创建建模。

相关问题