【发布时间】:2011-10-05 15:43:02
【问题描述】:
我问了question recently,坦率地说,从给出的答案来看,我第二次猜测我的整个策略/我如何设计类和数据库。
我还没有在我的任何实体框架项目中使用 virtual 关键字,也没有使用 Icollection,坦率地说,在 reading about it in 一些示例之后,我不完全理解为什么需要它,或者它是如何工作的.
在一个示例应用程序中,我有一个简单的设计,其中包含三个列表——人物、笔记和图片。这种关系使得一个人可以拥有多个笔记和图片,以及拥有一个图片徽标的人。
public class Person
{
public int ID { get; set; }
public string name { get; set; }
public Picture logo { get; set; }
}
public class Note
{
public int ID { get; set; }
public string Text { get; set; }
public Person Owner { get; set; }
}
public class Picture
{
public int ID { get; set; }
public string Path { get; set; }
public Person Owner { get; set; }
}
当我想选择一个人拥有的笔记列表时,我只需在笔记对象上执行db.Notes.Where(x=>x.owner=="y")。我想我明白,如果我要在 person 类上使用 Icollection,我可以改为按照db.person.select(x=> x.notes) 的方式执行一些操作来检索所有笔记。我的这个想法对吗?
如果您在上面相对简单的示例中处于我的位置,您将如何构建类(涉及 ICollection、虚拟或其他)?
此外,最重要的是,上面只是一个示例,但是在我的实际应用中,我使用了一个非常相似的结构,我使用我的自定义类型作为“连接器”/外键。
在我读过的许多例子中,(在上面的例子中)他们会使用public int OwnerID 而不是public person Owner。这真的让我很震惊,我正在质疑我的整个 EF 策略。有什么区别?
任何建议将不胜感激。
【问题讨论】:
-
是的,与 SQL 相比,EF 是一种范式转变,我会使用最终设计 I gave you 来设计它。
标签: c# class schema entity-framework-4.1 ef-code-first