• EF--ModelFirst


    EF框架有三种基本的方式:DB First,Model First,Code First。这里简单的说一下Model First,适合没有基础的同学照着做,学习基础的东西。

    1、建立一个类库项目,这个项目如果是在项目开发中,应该就是DB项目了,负责最底层的与数据库打交道的。

    2、在项目中添加一个实体数据模型,然后选择空模型

    3、在edmx文件中添加新实体。在这里,实体名称是项目中的类名;基类型是当前实体的父类,没有就不选择;实体集是这个实体在数据库中的表名;键属性是表的键,这里只支持

    单一键

    添加如下3个实体。

    这3个实体是相互之间有关系的,right和user是多对多的关系,user和role是多对一的关系,因此需要将它们关联起来

    在添加关联后,导航属性是自动添加的

    4、根据模型生成数据库表,由于model first只负责添加新表,不会创建数据库,因此,需要先在sqlserver中建立数据库。在这里为了简单,就使用了sql系统的默认数据库model

    点击完成后,会创建一个sql文件,内容就是创建3个实体的表和相关键值的sql语句

    5、执行这个sql文件

    点击connect后,系统自动会在sqlserver中创建相应的表。这个时候,需要去保存edmx文件,然后系统会自动在EfModelContainer类中添加相应的实体表的属性,并且创建相应

    的实体类

    6、在数据库中可以看到,系统自动添加了一个rightuser的关系表,这是因为这两个实体是多对多的关系,所以创建了这样一个关系表。同时,在user类中,自动

    添加了两个virtual修饰的字段,它们都是user实体的导航属性。至此,从模型到数据库的创建就完成了。

    7、下面来看看在modelfirst模式下,对数据库的增删改查

    在类class1中添加如下代码 。这里只是简单的介绍,如果是在项目开发中,这些增删改查的代码一般不会放在这个项目中。

     public class Class1
        {
            //实例化数据库上下文 这个EfModelContainer是系统自动生成的局部类
            EfModelContainer dbcontext = null;
            public Class1()
            {
                //实例化数据库上下文
                dbcontext = new EfModelContainer();
            }
            public IList<Role> getRoleSet()
            {
                //使用Lambda表达式查询数据
                IList<Role> RoleList = dbcontext.RoleSet.Where(o => o.Name != "").ToList();
                return RoleList;
            }
    
            public int AddRoleSet(Role r)
            {
                try
                {
                    dbcontext.RoleSet.Add(r);
                    dbcontext.SaveChanges();//对数据库的修改一定要添加这条语句
                }
                catch (Exception e)
                {
                    return 0;
                }
                return 1;
            }
    
            public int ModifyRoleSet(Role r)
            {
                IList<Role> rlist = dbcontext.RoleSet.Where(o => o.Id == r.Id).ToList();
                Role rn = rlist.ElementAtOrDefault(0);
                if (null != rn)
                {
                    rn = r;
                    return dbcontext.SaveChanges();
                }
                return 0;
            }
            public bool DelRoleSet(Role r)
            {
                try
                {
                    dbcontext.RoleSet.Remove(r);
                    dbcontext.SaveChanges();
                }
                catch (Exception e)
                {
                    return false;
                }
                return true;
    
            }
        }

    8、创建一个控制台项目,添加modelfirst项目的引用。从modelfirst项目中将数据库字符串复制了放到控制台项目的配置文件中。这个字符串也是系统自动生成的,直接复制就行

    static void Main(string[] args)
            {
                Class1 c = new Class1();
    
                Role rnew = new Role() { Id = Guid.NewGuid(), Name = "科长" };
                if (c.AddRoleSet(rnew) == 1)
                    Console.WriteLine("数据添加成功。id:" + rnew.Id + ";name:" + rnew.Name);
                else
                    Console.WriteLine("数据添加失败");
    
                rnew.Name = "副科长";
    
                if (c.ModifyRoleSet(rnew) == 1)
                    Console.WriteLine("数据修改成功。id:" + rnew.Id + ";name:" + rnew.Name);
                else
                    Console.WriteLine("数据修改失败");
                //使用Lambda表达式查询数据
                IList<Role> RoleList = c.getRoleSet();
                //打印查询结果  
                if (RoleList.Any())
                {
                    foreach (Role r in RoleList)
                    {
                        Console.WriteLine(r.Name + "----" + r.Id);
                    }
                }
    
                //if( c.DelRoleSet(rnew))
                //    Console.WriteLine("数据删除成功。");
                //else
                //    Console.WriteLine("数据删除失败");
                Console.Read();
            }

    执行结果

    9、现在数据库中有数据了,这个时候,如果需要添加新的表,或者对已有的表重新设计,需要特别的注意。

    首先是要在edmx中添加相应的实体或者修改,弄完之后,右键菜单--》根据模型生成数据库,这个时候会重新生成新的sql文件来覆盖原来的。但是这个sql文件是要将原来的表

    以及表的关系全部删除了,然后重新建立表,这样一来数据库中的数据就全没了,所以在这里千万不能去执行这个sql文件,如果非要执行,那必须先删除不需要的sql语句,保留

    自己修改的那部分才能执行。另外就是自己手动到sqlserver中去做修改了。

    在modelfirst模式下,如果要添加新表,必须先在模型中添加相应的实体,并且根据模型生成数据库后,还要在数据库中去添加表。如果是在项目开发中,这种对数据库结构有修改

    的操作最好是由专人负责。

    10、在user类中,通过关联关系,使得类中多了两个比较特殊的属性。属性role,类型是Role,在这里显的有点大材小用了,从数据库表中看,这个role本该表示roleid 的。在查询

    user表中数据的时候,系统会自动的将属性role的所有信息都查出来放在属性role中,这在某些时候会导致user类的对象太大了,当然有些时候又是很方便的,这个就需要具体的分析

    了。避免这样的情况就是不要去添加关联,直接在实体user中添加标量属性roleid就是了,当然设置外键可以在建好表之后再处理。

  • 相关阅读:
    服务器 防Dos攻击
    多浏览器 div 半透明
    网站工具收集
    广告平台
    ie6 position:fixed
    数据图 饼图 曲线图
    36个css框架
    css3 特效
    日ip 日pv
    网站 需求分析 收集
  • 原文地址:https://www.cnblogs.com/jin-/p/6589307.html
Copyright © 2020-2023  润新知