【发布时间】:2012-03-04 10:11:41
【问题描述】:
在查看此站点上的问题和答案并阅读一些 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# 对象上具有外键属性有什么意义呢?在上面的示例中,您可以从 Product 类中省略 CategoryID,一切都会正常工作。外键Category_ID 仍将在数据库中创建。
我唯一能想到的是人们可能希望能够使用可空类型而不是流畅的 API 来指定关系是否是可选的,但我认为同时拥有 Category 和 @ 确实会混淆事物987654329@财产。
所以在我四处走动并删除所有外键属性之前,这里有什么我遗漏的吗?这样做有什么意义?
谢谢!
【问题讨论】:
-
我认为将其设为
Guid?会有所不同。一些 DataAnnotations 可能适用。 -
是的,我在我的问题中提到过......但使用 fluent API 无法完成的任何事情?当你不需要时拥有两个本质上重复的属性似乎很邪恶。
标签: c# entity-framework ef-code-first