Точное назначение свойств навигации Entity Framework - PullRequest
0 голосов
/ 23 марта 2011

пожалуйста, посмотрите на следующие 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; }
}

Я не совсем уверен, для чего мне нужны свойства навигации, такие как ICollection в Currency1. Если говорить о EF CodeFirst, я не вижу разницы в созданной структуре базы данных. Таблицы Currency1 и Currency2 выглядят для меня практически одинаково. Так почему или когда имеет смысл добавить это дополнительное свойство?

Конечно, просто думая о POCO, я понимаю, что не могу получить доступ ни к каким странам из объекта Currency2. Например:

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

Но это единственная разница? Другими словами: если мне не нужен доступ к странам из объекта Currency2, нет необходимости добавлять соответствующее свойство навигации в класс Currency2 для целей EF? Вид здесь запутался ...

1 Ответ

1 голос
/ 23 марта 2011

Свойства навигации используются либо для прямого доступа (как вы описали), либо в запросах linq-to-entity.Если вы не планируете использовать его, вы можете удалить его из вашей модели.Просто имейте в виду, что вам нужно свойство навигации как минимум на одной стороне , чтобы иметь возможность моделировать реализацию базы данных с использованием подхода, основанного на первом коде.

...