• Entity Framework的简单使用之一对一关系


    关系型数据库一般有一对一、一对多、多带多的关系。在EF中,也存在这三种关系,下面我们就先讨论一下一对一的关系。

    在博客系统中,一个博客只能对应一个用户,而一个用户可以对应多个博客。这就是一对一和一对多关系的体现。

    在没有设置一对一关系时,返回的数据如下:

    public class Blog:BaseEntity
        {
            public string BlogName { get; set; }
            public string BlogUrl { get; set; }
            public string BlogContent { get; set; }
            public int UserId { get; set; }
            //public BlogUser BlogUser { get; set; } 
        }
    View Code
    public BlogMap()
            {
                this.ToTable("Blog");
                this.HasKey(c => c.Id);
                //this.HasRequired(ci => ci.BlogUser).WithMany().HasForeignKey(p => p.UserId);
            }
    View Code

    如果我想得到博客对应的用户,那么我们还得根据用户id再查找一次。我们可不可以在获取博客的时候顺便也把对应的用户一起获取出来呢?答案是可以的。

    public class Blog:BaseEntity
        {
            public string BlogName { get; set; }
            public string BlogUrl { get; set; }
            public string BlogContent { get; set; }
            public int UserId { get; set; }
            public virtual BlogUser BlogUser { get; set; } 
        }
    View Code
    public BlogMap()
            {
                this.ToTable("Blog");
                this.HasKey(c => c.Id);
                this.HasRequired(ci => ci.BlogUser).WithMany().HasForeignKey(p => p.UserId);
            }
    View Code

    这样,就把博客跟用户的一对一的关系建立起来了。

    通过运行结果,我们可以发现:

    BlogUser对应已经加载出来了,只不过此时仍是linq对象

    但是我们可以直接使用该对象。

    不过细心的读者可能会发现,为什么BlogUser要声明为virtual呢?这就是EF的延迟加载机制,关于延迟加载,后面会进行讨论。

  • 相关阅读:
    java 添加一个线程、创建响应的用户界面 。 演示示例代码
    Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物
    VMWARE虚拟机无法访问的三种方法分析
    新近
    leetcode-2 Add Two Numbers 计算两个对应的列表和问题
    Android4.0 Design之UI设计缺陷1
    Html 5 坦克大战(韩顺平县版本号)
    采取Volley,实现瀑布流
    fzu 2150 Fire Game 【身手BFS】
    第45周一
  • 原文地址:https://www.cnblogs.com/dengwenbo/p/4748873.html
Copyright © 2020-2023  润新知