В чем смысл создания свойств внешнего ключа при использовании Entity Framework Code First?

Просматривая вопросы и ответы на этом сайте и читая некоторые из лучших в Google учебников по разработке Code First, я часто встречаю следующую схему...

public class Category
{
    public Category()
    {
        Products = new Collection();
    }
    public Guid ID { get; set; }
    public string Name { get; set; }
    public virtual ICollection Products { get; set; }
}

public class Product
{
    public Guid ID { get; set; }
    public string Name { get; set; }
    public DateTime DateAdded { get; set; }
    public Guid CategoryID { get; set; } // Seemingly redundant property
    public virtual Category Category { get; set; }
}

При поиске учебников по Code First появляются следующие две страницы, использующие этот шаблон:

http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx

http://www.codeproject.com/Articles/327945/Architecture-Guide-ASP-NET-MVC3-Entity-Framework-C

Вопрос: Так в чем же смысл наличия свойства внешнего ключа у объекта Code First C#? В приведенном выше примере вы можете опустить CategoryID из класса Product, и все будет работать нормально. Внешний ключ Category_ID все равно будет создан в базе данных.

Единственное, о чем я могу подумать, это то, что людям может понравиться возможность указывать, является ли отношение необязательным, используя nullable типы вместо fluent API, но я думаю, что это действительно запутывает ситуацию, когда есть и Category и CategoryID свойства.

Итак, прежде чем я пойду и удалю все свои свойства внешних ключей, есть ли что-то, что я упускаю? Какой смысл в этом?

Спасибо!

9
задан Lucifer Sam 12 February 2012 в 22:15
поделиться