文章是作为初学者记录之用,没有学习过的同学可以借鉴一下,至于用过和高手嘛,就算了吧。仅是入门。废话不多说了,马上新建个项目,添加Entity Framework,这个词以下将用EF代替。

本文使用的IDE为vs2012。我是新建了一个控制台项目,然后添加的EF,以后我会使用EF作为类库添加到项目中,但这次仅作了解。

选择Ado.net实体数据模型,文件名随便,我在这里选择了默认名称Model1.edmx,

在弹出的对话框中选择从数据库生成,这里有个名称叫做dbfirst,就是说数据库先存在,然后根据数据库生成实体模型等。

选择新建连接,然后选择你要实现的数据库和表,

表可以选择数据库中的一部分,也可以选择全部,这要看你的需要了,这里只做学习用,所以我只选择了一个user表。点击完成,这过程可能要等一会,因为要导入很多dll。

之后我们会看到一个类似

uml图,这要归结为vs的强大了,其实edmx文件就是一个xml文档,你可以使用xml打开方式打开这个edmx文件。下面是我的edmx文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
  3. <!-- EF Runtime content -->
  4. <edmx:Runtime>
  5.  
  6. <!-- SSDL content -->
  7. <edmx:StorageModels>
  8. <Schema Namespace="remotingModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
  9. <EntityContainer Name="remotingModelStoreContainer">
  10. <EntitySet Name="user" EntityType="remotingModel.Store.user" store:Type="Tables" Schema="dbo" />
  11. </EntityContainer>
  12. <EntityType Name="user">
  13. <Key>
  14. <PropertyRef Name="id" />
  15. </Key>
  16. <Property Name="id" Type="nvarchar" Nullable="false" MaxLength="" />
  17. <Property Name="name" Type="nvarchar(max)" />
  18. <Property Name="pwd" Type="nvarchar(max)" />
  19. <Property Name="department" Type="int" />
  20. <Property Name="status" Type="int" />
  21. <Property Name="registertime" Type="datetime" />
  22. <Property Name="level" Type="nvarchar" MaxLength="" />
  23. <Property Name="cometime" Type="datetime" />
  24. <Property Name="isdel" Type="int" />
  25. <Property Name="balance" Type="money" />
  26. </EntityType>
  27. </Schema>
  28. </edmx:StorageModels>
  29.  
  30. <!-- CSDL content -->
  31. <edmx:ConceptualModels>
  32. <Schema Namespace="remotingModel" Alias="Self" p1:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:p1="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
  33. <EntityContainer Name="remotingEntities" p1:LazyLoadingEnabled="true">
  34. <EntitySet Name="users" EntityType="remotingModel.user" />
  35. </EntityContainer>
  36. <EntityType Name="user">
  37. <Key>
  38. <PropertyRef Name="id" />
  39. </Key>
  40. <Property Name="id" Type="String" Nullable="false" MaxLength="" Unicode="true" FixedLength="false" />
  41. <Property Name="name" Type="String" MaxLength="Max" Unicode="true" FixedLength="false" />
  42. <Property Name="pwd" Type="String" MaxLength="Max" Unicode="true" FixedLength="false" />
  43. <Property Name="department" Type="Int32" />
  44. <Property Name="status" Type="Int32" />
  45. <Property Name="registertime" Type="DateTime" Precision="" />
  46. <Property Name="level" Type="String" MaxLength="" Unicode="true" FixedLength="false" />
  47. <Property Name="cometime" Type="DateTime" Precision="" />
  48. <Property Name="isdel" Type="Int32" />
  49. <Property Name="balance" Type="Decimal" Precision="" Scale="" />
  50. </EntityType>
  51. </Schema>
  52. </edmx:ConceptualModels>
  53.  
  54. <!-- C-S mapping content -->
  55. <edmx:Mappings>
  56. <Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs">
  57. <EntityContainerMapping StorageEntityContainer="remotingModelStoreContainer" CdmEntityContainer="remotingEntities">
  58. <EntitySetMapping Name="users">
  59. <EntityTypeMapping TypeName="remotingModel.user">
  60. <MappingFragment StoreEntitySet="user">
  61. <ScalarProperty Name="id" ColumnName="id" />
  62. <ScalarProperty Name="name" ColumnName="name" />
  63. <ScalarProperty Name="pwd" ColumnName="pwd" />
  64. <ScalarProperty Name="department" ColumnName="department" />
  65. <ScalarProperty Name="status" ColumnName="status" />
  66. <ScalarProperty Name="registertime" ColumnName="registertime" />
  67. <ScalarProperty Name="level" ColumnName="level" />
  68. <ScalarProperty Name="cometime" ColumnName="cometime" />
  69. <ScalarProperty Name="isdel" ColumnName="isdel" />
  70. <ScalarProperty Name="balance" ColumnName="balance" />
  71. </MappingFragment>
  72. </EntityTypeMapping>
  73. </EntitySetMapping>
  74. </EntityContainerMapping>
  75. </Mapping>
  76. </edmx:Mappings>
  77.  
  78.  
  79. </edmx:Runtime>
  80. <!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
  81. <Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">
  82. <Connection>
  83. <DesignerInfoPropertySet>
  84. <DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
  85. </DesignerInfoPropertySet>
  86. </Connection>
  87. <Options>
  88. <DesignerInfoPropertySet>
  89. <DesignerProperty Name="ValidateOnBuild" Value="true" />
  90. <DesignerProperty Name="EnablePluralization" Value="False" />
  91. <DesignerProperty Name="IncludeForeignKeysInModel" Value="True" />
  92. <DesignerProperty Name="CodeGenerationStrategy" Value="无" />
  93. </DesignerInfoPropertySet>
  94. </Options>
  95. <!-- Diagram content (shape and connector positions) -->
  96. <Diagrams></Diagrams>
  97. </Designer>
  98. </edmx:Edmx>

上面我用空行隔出来了三个部分,第一部分就是描述数据库,包括字段,字段类型。第二部分就是实体模型,注意下面的t4模板要用到这个部分。最后部分就是映射文件,也就是将第一部分与第二部分的内容之间的桥。对应关系。

下面我们打开Model1.tt文件,这里如果我们直接打开,效果就是一个txt文本。我们可以安装一个插件,在工具中选择扩展和更新,联机中搜索t4 editor,下载安装,重启vs,重新打开Model1.tt文件就可以看到效果了,这个文件读取之前的edmx文件,遍历edmx实体及实体的属性,生成相应实体的cs文件。我们可以说Model1.tt文件主要的作用就是生成实体文件的。还有一个context.tt文件,从文件名我们可以猜个大概(上下文,我们常常用这个东西操作好多东西),这时我们可以想一下,EF是用来操作数据库的,现在数据实体有了,怎么进行增删改查呢?对,就是这个context。我们这就来看看这个context.cs文件吧,

  1. namespace EFConsole
  2. {
  3. using System;
  4. using System.Data.Entity;
  5. using System.Data.Entity.Infrastructure;
  6.  
  7. public partial class remotingEntities : DbContext
  8. {
  9. public remotingEntities()
  10. : base("name=remotingEntities")
  11. {
  12. }
  13.  
  14. protected override void OnModelCreating(DbModelBuilder modelBuilder)
  15. {
  16. throw new UnintentionalCodeFirstException();
  17. }
  18.  
  19. public DbSet<user> users { get; set; }
  20. }
  21. }

似乎文件内容好少啊,别急,看父类DBContext,父类的方法很多。

remotingEntities类会将所有的数据实体封装成一个集合,然后让我们操作实体。

下面让我们来看看这个上下文的强大功能吧

简单的增删改查功能

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace EFConsole
  8. {
  9. class Program
  10. {
  11. public static remotingEntities dbContext = new remotingEntities();
  12. static void Main(string[] args)
  13. {
  14.  
  15. add();
  16. select();
  17. update();
  18. remove();
  19. Console.ReadKey();
  20. }
  21.  
  22. #region 添加方法
  23. /// <summary>
  24. /// 添加方法
  25. /// </summary>
  26. public static void add()
  27. {
  28. int res = -;
  29. user tempData = new user() { name = "test", id = "", balance = };
  30. dbContext.users.Add(tempData);
  31. res = dbContext.SaveChanges();
  32. if (res > )
  33. {
  34. Console.WriteLine("add function:suc");
  35. }
  36. else
  37. {
  38. Console.WriteLine("add function:fail");
  39. }
  40. }
  41. #endregion
  42.  
  43. #region 查询方法
  44. /// <summary>
  45. /// 查询方法
  46. /// </summary>
  47. public static void select()
  48. {
  49. user tempData = dbContext.users.Where(e => e.id == "").FirstOrDefault();
  50. Console.WriteLine("select function:" + tempData.name);
  51. }
  52. #endregion
  53.  
  54. #region 修改方法
  55. /// <summary>
  56. /// 修改方法
  57. /// </summary>
  58. public static void update()
  59. {
  60. int res = -;
  61. user tempData = dbContext.users.Where(e => e.id == "").FirstOrDefault();
  62. Console.WriteLine("before update function:" + tempData.name);
  63. tempData.name = "update name";
  64. res = dbContext.SaveChanges();
  65. if (res > )
  66. {
  67. Console.WriteLine("update function:suc,update data userName is" + tempData.name);
  68. }
  69. else
  70. {
  71. Console.WriteLine("update function :fail");
  72. }
  73. }
  74. #endregion
  75.  
  76. #region 删除方法
  77. /// <summary>
  78. /// 删除方法
  79. /// </summary>
  80. public static void remove()
  81. {
  82. int res = -;
  83. user tempData = dbContext.users.Where(e => e.id == "").FirstOrDefault();
  84. dbContext.users.Attach(tempData);
  85. dbContext.users.Remove(tempData);
  86. res = dbContext.SaveChanges();
  87. if (res > )
  88. {
  89. Console.WriteLine("remove function :suc");
  90. }
  91. else
  92. {
  93. Console.WriteLine("remove function :fail");
  94. }
  95. }
  96. #endregion
  97. }
  98. }

成功了哦,不信可以去数据库证实一下。

今天就写到这里了,有时间还会将EF当做类库写一个简单的测试。

项目源码

Entity Framework 学习第一天的更多相关文章

  1. Entity Framework 学习第一天 续

    改写第一天的增删改查方法,观察增删改查的本质 using System; using System.Collections.Generic; using System.Data.Entity.Infr ...

  2. Entity Framework 学习整理(分播客整理)

    MSDN: http://msdn.microsoft.com/en-us/data/aa937723 台湾博客: http://www.dotblogs.com.tw/yc421206/ http: ...

  3. Entity Framework学习笔记

    原文地址:http://www.cnblogs.com/frankofgdc/p/3600090.html Entity Framework学习笔记——错误汇总   之前的小项目做完了,到了总结经验和 ...

  4. Entity Framework 学习中级篇1—EF支持复杂类型的实现

    本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Las ...

  5. Entity Framework 学习

    Entity Framework 学习初级篇1--EF基本概况 Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry. ...

  6. ADO.NET Entity Framework学习笔记(3)ObjectContext

    ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转]   说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject ...

  7. Entity Framework 学习整理

    MSDN: http://msdn.microsoft.com/en-us/data/aa937723 台湾博客: http://www.dotblogs.com.tw/yc421206/ http: ...

  8. Entity Framework 学习笔记(2)

    上期回顾:Entity Framework 学习笔记(1) Entity Framework最主要的东西,就是自己创建的.继承于DbContext的类: /// <summary> /// ...

  9. MVC5 Entity Framework学习

    MVC5 Entity Framework学习(1):创建Entity Framework数据模型 MVC5 Entity Framework学习(2):实现基本的CRUD功能 MVC5 Entity ...

随机推荐

  1. SQL数据库基本语句

    SQL特点--> 1)综合统一.SQL是集数据定义.数据操作和数据控制于一体,语言峰峰统一,可独立完成数据库生命周期的所有活动. 2)高度非过程化.SQL语言是高度非过程化语言,当进行数据操作时 ...

  2. 从汇编层面深度剖析C++虚函数

    文章出处:http://blog.csdn.net/linyt/article/details/6336762 虚函数是C++语言实现运行时多态的唯一手段,因此掌握C++虚函数也成为C++程序员是否合 ...

  3. leetcode 14

    14. Longest Common Prefix Write a function to find the longest common prefix string amongst an array ...

  4. Jquery设置select控件指定text的值为选中项

    <select name="streetid" id="streetid"> <option value="4">北 ...

  5. [原]hdu2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (这个只是题目名字) (多重背包)

    本文出自:http://blog.csdn.net/svitter 原题:http://acm.hdu.edu.cn/showproblem.php?pid=2191 题意:多重背包问题.转换成为01 ...

  6. 常见S1信令交互流程

    0. S1 Setup

  7. DTD 知识归纳总结

    一:在xml文件中引用一个dtd规则. <!DOCTYPE 根元素 [元素声明]> 二: xml文档中中包含的内容模块 元素:元素是 XML 以及 HTML 文档的主要构建模块. 属性:属 ...

  8. Sublime Text 2 安装与使用SFTP插件

    http://wbond.net/sublime_packages/sftp/usage http://www.360doc.com/content/13/0603/15/9437165_290170 ...

  9. javascript中split字符串分割函数

    1. var ss=s.split("fs"); for(var i=0;i<ss.length;i++){ 处理每一个ss[i]; } 2. "2:3:4:5&q ...

  10. Windows 上如何安装Sqlite(转载)

    1.获得命令行程序 SQLite命令行程序(CLP)是开始使用SQLite的最好选择,按照如下步骤获取CLP: 1).打开浏览器进入SQLite主页,   www.sqlite.org. 2).单击页 ...