Просматривая вопросы и ответы на этом сайте и читая некоторые из лучших в 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://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
свойства.
Итак, прежде чем я пойду и удалю все свои свойства внешних ключей, есть ли что-то, что я упускаю? Какой смысл в этом?
Спасибо!