首页 > 其他 > 详细

从零学习Entity Framework

时间:2014-04-26 08:51:46      阅读:400      评论:0      收藏:0      [点我收藏+]

       以前在学校的时候没有使用过 Entity Framework 框架,这段时间不怎么忙,就想把这个框架学习一下。其实我对这个也不是

很理解,就是把自己学习的过程记录下来,预防自己会忘记,我一直是一个记性不太好的人。好吧现在就开始了。

      1.环境VS2010+MS-SQL 你有其它版本的vs和数据库也行。其实我也不知道要.net Framework 那个版本才支持这个框架的。

3或3.5以上应该都没问题

      2.安装Nuget

        Tools->Extension magage->搜索Nuget
        注意:如果你查找到的Nuget 里面的按钮时灰色的,说明你安装了,点击update 如果可以点击你就更新Nuget,因为好像不是最新的Nuget

就没法安装 Entity Framework 安装好了之后,重启下VS。

      3.安装Entity Framework

       Tools->Nuget package manager->package manager console 在控制台输入 Install-Package EntityFramework 

一般情况下这样做事会报错。原因是因为你没有建立一个项目。所以我在这就先建立一个控制台项目(EFTest)重复三步骤就安装

好了,仔细看你会发现你的项目里会多两个文件(packages.config,App.config),同时也帮我们引进了一些需要的dll.

      4.配置连接数据库

         打开App.config文件,添加如下节点 

1
2
3
<connectionStrings>
   <add name="DbHelper" providerName="System.Data.SqlClient" connectionString="Server=(local);Database=EFTest;Trusted_Connection=true;"/>
</connectionStrings>

  说明下:name :属性一般为你操作数据库的那么类的类名。

                 Databass: 就是你需要框架帮你建的数据库(不需要先去数据库建立)

     5.下面上一个简单的例子

         Model:也就是两个实体类

  file: Category.cs   

1
2
3
4
5
6
class Category
 {
     public int ID{get;set;}
     [Required]
     public string catename { get; set; }
 }

 

1
2
3
4
5
6
7
8
9
10
class Commodity
   {
       public int ID { get; set; }
       [Required]
       public string name{get;set;}
       public float oneprice { get; set; }
       [Required]
       public virtual Category cate { get; set; }
 
   }

  

  说明:当需要这类[Required]标签时 需要引进命名空间  using System.ComponentModel.DataAnnotations;

     改命名空间还好包含的标签有

      [key]   定义主键数据库主键  由于coding-first 采用的是约定大于配置。这里有个疑问 当model里有ID,又有[Key]标识的其它属性时,EF

    是让谁做主键,这个我没有在编辑器里试试。改天试下。

      [MaxLenth(xxx)]    数据库字段长度 

      [MinLenth(xxx)]     数据库字段长度

      [Required]            必填写的

      [NotMapped]  不与数据库匹配的字段,也就意味着不会再数据库里创建该字段

      混合使用

      [MaxLenth(20),MinLenth(6)]

      其他的用法可以 查找一下命名空间 DataAnnotations

      重要:我使用的是EF6.1 我发现不加 virtual 也可以建立外键关联。

    file:Dbhelper.cs

1
2
3
4
5
6
7
class DbHelper : DbContext
{
 
    public DbSet<Category> Category { get; set; }
    public DbSet<Commodity> Commodity { get; set; }
 
}

  说明:这里需要引进命名空间 using System.Data.Entity;

      这样就可以操作数据库了。

下面是对数据库的基本操作了;

        给  Category 表添加数据

1
2
3
4
5
6
7
8
DbHelper context = new DbHelper();
Console.WriteLine("请输入商品类别:");
string udname = Console.ReadLine();
Category ug = new Category();
ug.catename = udname;
context.Category.Add(ug);
context.SaveChanges();
Console.WriteLine("添加成功");

  给   Category 表修改数据 (我用的是一种比较笨的方法,我觉得实际开发应该不会用方法来修改数据)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var gr = context.Category.Select(a => a).ToList();//获取Category表的所有数据
 gr.ForEach(b => Console.WriteLine("{0:######}   {1:######}", b.ID, b.catename));//遍历表的数据
 /*   另外一种遍历方式         
         Category ag=new Category();
         for(int i=0;i<gr.Count;i++){
           ag=gr.ElementAt(i)
          }
 */
 Console.WriteLine("请选择要修改的商品类别:");
 int grid = int.Parse(Console.ReadLine().Trim());
 if (grid > 0)
 {
     Category gro = context.Category.Where(t => t.ID == grid).SingleOrDefault();
     Category aa = new Category();
     Console.WriteLine("请输入修改后的名字:");
     aa.catename = Console.ReadLine().Trim();
     context.Category.Remove(gro);
     context.Category.Add(aa);
     context.SaveChanges();
     Console.WriteLine("修改成功");
 
 }
 else
 {
     Console.WriteLine("您输入的不是类别,请从输");
     
 }

  

     给  Category 表查询所有数据  

1
2
var gr = context.Category.Select(a => a).ToList();
gr.ForEach(b => Console.WriteLine("{0:######} {1:######}", b.ID, b.catename));

  说明:如果查询一定条件的数据可以用这种形式 var apu = context.Category.Where(a => a.ID > 3).ToList();

     给 Category 表删除数据 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var gr = context.Category.Select(a => a).ToList();
 gr.ForEach(b => Console.WriteLine("{0:######}   {1:######}", b.ID, b.catename));
 Console.WriteLine("请选择要删除的分组:");
 int grid = int.Parse(Console.ReadLine().Trim());
 if (grid > 0)
 {
     Category gro = context.Category.Where(t => t.ID == grid).SingleOrDefault();
     context.Category.Remove(gro);
     context.SaveChanges();
     Console.WriteLine("删除成功");
 }
 else
 {
     Console.WriteLine("您输入的不是分组,请从输");
                  <br>                }

  这是单独一张表的操作,假如需要查询Commodity 表,该表有导航属性时,就需要用下面的方法

1
2
3
4
5
DbHelper context = new DbHelper();
var alluser = context.Commodity.Include(a => a.cate).ToList();
alluser.ForEach(a =>
 Console.WriteLine("{0:######}   {1:################}    {2:############}  {3:########} ",a.ID.ToString(),a.name,a.cate.catename,a.oneprice.ToString()));
context.Dispose();

  

    如果代码里有调用 context.SaveChanges();就不需要 调用context.Dispose()显示的释放。

   我在学习的时候遇到一个问题就是,不知道怎样实现这种SQL语句 :select *  from table where table.ID in (1,2,3,4) 这类的写法,找了下没资料

  没有找到,知道的希望告诉下我!547304838@qq.com,需要代码的也可以发邮件到这个邮箱,我会一一发!

         今天学习的就到这了,记录下,以便自己跟快回忆起来!

              

 

 

     

 

 

 

 

从零学习Entity Framework,布布扣,bubuko.com

从零学习Entity Framework

原文:http://www.cnblogs.com/try-wyh/p/3689365.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!