4

通过示例更容易展示——我使用代码优先来构建数据库。我有以下课程:

public class Blog
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string AuthorName { get; set; }
        public List<Post> Posts { get; set; }
        public string BlogCode
        {
            get
            {
                return Title.Substring(0, 1) + ":" + AuthorName.Substring(0, 1);
            }
        }
    }

    public class Post
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        public virtual Blog Blog { get; set; }
    }

我不明白为什么 Post 需要一个公共的虚拟博客博客。它是否充当数据库中的外键以链接回博客?如果是这种情况,您似乎会使用博客 ID。

4

1 回答 1

8

Post它确实允许两个表相关,并在相关上放置一个外键Blog

拥有public virtual Blog Blog { get; set; }允许您Blog从一个Post对象引用该对象,然后访问Blog. 例如,myPost.Blog.Id 如果它使用了public virtual int BlogId { get; set; },您将无法执行此操作,因为BlogId它只是一个int值。

如果您的域对象是延迟加载的,那么在使用该属性之前,myPost.Blog实际上不会使用数据库中的数据进行水合(即不调用表)。Blog一旦使用它,Entity Framework 就会为您调用数据库并使用Blog表中的数据对对象进行水合。这是使用 ORM 的一部分……它允许您在处理数据库操作的同时专注于代码。

于 2012-06-27T19:47:02.747 回答