EF框架—Model-First

这一篇主要说一下EF框架中,Model First做法,仍然采用上一篇的案例。但增加评论功能。首先打开Blog.edmx文件,在空白处右键,添加新实体Comment,如下图示:

点击确定,关闭窗口。

第二步:在Comment实体上右键,选择Add—Scalar Property,为这个类添加CommentContent(string类型)属性和PostId(Int32)属性.

第三步:在左侧工具箱窗口,选择Association,为Post与Comment两个实体添加关联。具体如下图示:

点击确定,关闭窗口。最后完成后Blog.edmx如下图示:

第四步:在Blog.edmx空白处右键,选择Generate Database from Model... ,生成更新数据库的Sql语句,默认的文件名是Blog.edmx.sql。当然,这个文件里包含了原有的一些表的结构生成代码,各位可以选择,数据库中目前不存在的Comment表及相关约束等语句来执行。执行完成后,打开服务浏览器窗口,刷新,即可看到新增加的表comment,然后为表添加一些测试数据,注意外键的关联。

最后一步:当然就是写些代码,测试一下,具体如下:


class Program
    {
        static void Main(string[] args)
        {
            IList<BlogUser> blogUsers = TestEF.GetAllBlogUsers();

            ///遍历所有查询结果
            foreach (var blogUser in blogUsers)
            {
                Console.WriteLine(blogUser);

                ///获取外键对象的内容
                foreach (var post in blogUser.Posts)
                {
                    Console.WriteLine("\t 随笔标题:{0}", post.PostTitle);
                  
                    foreach (var comment in post.Comments)
                    {
                        Console.WriteLine("\t\t{0}", comment.CommentContent);
                    }
                }
            }
        
            
        }
    }

    public static class TestEF
    {
        public static IList<BlogUser> GetAllBlogUsers()
        {
            
            ///BlogDBEntities是继承于ObjectContext类,自动生成
            ///可以打开Blog.Desgner.cs文件找到
            ///原型: public partial class BlogDBEntities : ObjectContext
            ///可以理解为 他代表了当前数据库环境对象
            ///同时,在Blog.Desgner.cs里还可以找到两个实体BlogUser及Post
            using (BlogDBEntities blogDB = new BlogDBEntities())
            {

                ///采用Linq语法读取数据
                ///通过Include方法将子对象Post预先加载
                IList<BlogUser> blogUsers = blogDB.BlogUsers.Include("Posts").ToList<BlogUser>();

                foreach (var item in blogUsers)
                {
                    foreach (var post in item.Posts)
                    {
                        //对于Comments对象,也进行了预加载
                        if (!post.Comments.IsLoaded)
                        {
                            post.Comments.Load();
                        }
                    }
                }
                return blogUsers;
            }
            
        }   
    }

    public partial class BlogUser
    {
        public override string ToString()
        {
            return string.Format("编号:{0} 姓名:{1}", this.BlogID, this.BlogName);
        }
    }

最后运行效果如下图:

这一篇,其实是采用了Database First与Model First混合的作法,这时,要注意命名的规范性,否则可能会引发异常,如果在测试过程中,发现异常,请查看Blog.edm文件(XML格式)的描述是否与数据库的表相匹配,也就是C-S mapping content节的配置。

(本文源码:单击下载


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三天不学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值