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 ;
}
return ;
} public int ModifyRoleSet(Role r)
{
IList<Role> rlist = dbcontext.RoleSet.Where(o => o.Id == r.Id).ToList();
Role rn = rlist.ElementAtOrDefault();
if (null != rn)
{
rn = r;
return dbcontext.SaveChanges();
}
return ;
}
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) == )
Console.WriteLine("数据添加成功。id:" + rnew.Id + ";name:" + rnew.Name);
else
Console.WriteLine("数据添加失败"); rnew.Name = "副科长"; if (c.ModifyRoleSet(rnew) == )
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就是了,当然设置外键可以在建好表之后再处理。

EF--ModelFirst的更多相关文章

  1. How to: Use the Entity Framework Model First in XAF 如何:在 XAF 中使用EF ModelFirst

    This topic demonstrates how to use the Model First entity model and a DbContext entity container in ...

  2. EF ModelFirst 步骤

    1 新建实体数据模型 ,选择空模型 2 建各个实体,并指定各字段属性,字符串需要指定长度 3 添加关系,选择关系类型,勾选添加外键 4 新建空的数据库,然后在edmx文件的空白处点右键,选择从模型生成 ...

  3. 1.翻译:EF基础系列--什么是Entity Framework?

    大家好,好久不见,EF系列之前落下了,还是打算重新整理一下. 先说说目前的打算:先简单了解一下EF基础系列-->然后就是EF 6 Code-First系列-->接着就是EF 6 DB-Fi ...

  4. XAF_GS_02_创建第一个XAF项目

    上一节我们讲解了如何安装XAF环境,这次我们要开始创建一个自己的XAF项目. Setp 1 第一步打开你的Visual Studio,新建项目,如下图所示,选择DevExpress XAF,选择好你的 ...

  5. Could not load file or assembly ‘ Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342’ or one of its dependencies系统找不到指定文件 处理方法

    前些天做EF Model-First测试,开发环境为VS2013,数据库为Oracle 11g.所有东西都装好数据模型已经建立后准备执行“根据模型生成数据库”命令时,出现:Could not load ...

  6. %E3%80%90%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E3%80%91

    "%3Cdiv%20class%3D%22htmledit_views%22%20id%3D%22content_views%22%3E%0A%20%20%20%20%20%20%20%20 ...

  7. EF下CodeFirst、DBFirst与ModelFirst分析

    EF4.1有三种方式来进行数据操作及持久化.分别是Database-First,Model-First,Code-first:1.Database First是基于已存在的数据库,利用某些工具(如Vs ...

  8. EF框架搭建小总结--ModelFirst模型优先

    前言:去年刚工作的时候,也是刚刚正式接触.net,当时了解了EF以及三种开发模式,Database First.Model First .Code First.公司用的开发模式是Database Fi ...

  9. 深入浅出EF之ModelFirst和DBFirst

    在上篇博文中,小编主要简单的介绍了一下EF的一些基础知识,其中,小编蜻蜓点水的提了一下ModelFirst和DBFirst,ModelFirst先设计实体,然后根据模型生成数据库,DBFirst根据数 ...

  10. 第十二节: EF的三种模式(二) 之 ModelFirst模式(SQLServer为例)

    一. 简介  顾名思义,ModelFirst是模型优先,是DBFirst的逆向模式,先建立实体数据模型,然后根据实体数据模型来生成数据库,从而驱动整个开发流程.(生成一个空的edmx文件,手动在里面建 ...

随机推荐

  1. 洛谷 2922 BZOJ 1590 [USACO08DEC]秘密消息Secret Message

    [题意概述] 给出n个01串组成的字典和m个询问,每次询问某个01串和多少个字典中的串有相同的前缀.(前缀长度是两串中较小的部分) [题解] 直接上Trie树即可.树上每个节点记录两个信息:这个节点有 ...

  2. [bzoj1925][Sdoi2010][地精部落] (序列动态规划)

    Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...

  3. Hello Shiro

    [HelloWorld Shiro] 1.搭建开发环境-加入jar包 2.步骤(前提:已下载好Shiro资源包): ①找到shiro-root-1.2.3-source-release包, ②按Apa ...

  4. HDU 2082 母函数法

    #include <cstdio> #include <cstring> using namespace std; ] , dp[][]; int main() { // fr ...

  5. [bzoj1001]狼爪兔子[平面图的最小割等于其对偶图的最短路]

    一定要仔细算内存,,,又少写一个零.. #include <bits/stdc++.h> using namespace std; template<const int _n,con ...

  6. B树、B-树、B+树、B*树介绍,和B+树更适合做文件索引的原因

    今天看数据库,书中提到:由于索引是采用 B 树结构存储的,所以对应的索引项并不会被删除,经过一段时间的增删改操作后,数据库中就会出现大量的存储碎片, 这和磁盘碎片.内存碎片产生原理是类似的,这些存储碎 ...

  7. Spring-data-jpa 笔记(一)

    Spring Data JPA简介: 可以理解为 JPA 规范的再次封装抽象,底层还是使用了 Hibernate 的 JPA 技术实现,引用 JPQL(Java Persistence Query L ...

  8. - > 贪心基础入门讲解四——独木舟问题

    n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟? 分析: 一个显然的策略 ...

  9. 前段集成解决方案grunt+yeoman初步认识

    1.什么是前段集成解决方案? 将前端研发领域中各种分散的技术元素集中在一起,并对常见的前端开发问题.不足.缺陷和需求,所提出的一种解决问题的方案 2.yeoman 应用的架构,模型!  相当于一个生成 ...

  10. SecureCRT 8.0公布

    百度搜索到的7.3 注冊码生成器还是能够用于8.0的破解. 破解时,选择手动输入(Enter Licence Manually)产生的代码. 添加了一些特性,我最看重的是: 1.  能够在以下命令窗体 ...