Просматривая вопросы и ответы на этом сайте и читая некоторые из лучших руководств Google по разработке Code First, я часто вижу следующую картину...
public class Category
{
public Category()
{
Products = new Collection<Product>();
}
public Guid ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> 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
все равно будет создан в базе данных.
Единственное, что я мог придумать, это то, что люди могли бы захотеть указать, является ли отношение необязательным, используя типы, допускающие значение NULL, вместо плавного API, но я думаю, что наличие свойства Category
и CategoryID
действительно сбивает с толку.
Итак, прежде чем я пойду и удалю все свои свойства внешнего ключа, есть ли что-то, что я здесь упустил? Какой смысл это делать?
Спасибо!
Guid?
имеет значение. Могут применяться некоторые аннотации к данным. - person Henk Holterman   schedule 13.02.2012