EF code frist 使用Linq或者Sql执行

Posted tianwen9579

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF code frist 使用Linq或者Sql执行相关的知识,希望对你有一定的参考价值。

1.使用Linq查询

  1. using (var db = new BloggingContext())  
  2.             {  
  3.                 #region 使用linq查询  
  4.                 Console.Write("Enter a name for a new Blog: ");  
  5.                 var name = Console.ReadLine();  
  6.   
  7.                 var blog = new Blog { Name = name };  
  8.                 db.Blogs.Add(blog);  
  9.                 db.SaveChanges();  
  10.                 var query = from b in db.Blogs  
  11.                             orderby b.Name  
  12.                             select b;  
  13.   
  14.                 Console.WriteLine("All blogs in the database:");  
  15.                 foreach (var item in query)  
  16.                 {  
  17.                     Console.WriteLine(item.Name);  
  18.                 }  
  19.   
  20.                 Console.WriteLine("Press any key to exit...");  
  21.                 Console.ReadKey();  
  22.                 #endregion   

2. 使用sql语句查询

2.1 执行存储过程

 

  1. List<Post> Posts = db.Database.SqlQuery<Post>("TestProcedure @personId"new SqlParameter("@personId""1000")).ToList();  
  2. foreach (var item in Posts)  
  3. {  
  4.     Console.WriteLine("{0}  {1}  {2}  {3}", item.BlogId, item.Content, item.PostId, item.Title);  
  5. }  

2.2 执行普通sql语句 查询

 

  1. var blogs = db.Database.SqlQuery<Blog>("select * from Blogs where Name = @name"new SqlParameter("name""gjp"));  
  2. foreach (var item in blogs)  
  3. {  
  4.     Console.WriteLine("ID:{0},Name:{1}", item.BlogId, item.Name);  
  5. }  
  6. Console.ReadKey(); 

2.3 使用sql语言更新,删除 ,增加操作可以使用ExecuteSqlCommand方法

 

  1. var items = db.Blogs.ToList();  
  2.                int id;  
  3.                foreach (var item in items)  
  4.                {  
  5.                    id = item.BlogId;  
  6.                    break;  
  7.                }  
  8.                Console.WriteLine("执行sql,更改");  
  9.                int count = db.Database.ExecuteSqlCommand("update Blogs set Name = @content where BlogId = @postid"new SqlParameter[] { new SqlParameter("@content""shjgshgujsjgjkagj"), new SqlParameter("@postid", 1) });  
  10.                if (count == 1)  
  11.                {  
  12.                    db.SaveChanges();  
  13.                    Console.WriteLine("Sql执行成功");  
  14.                    foreach (var item in db.Blogs)  
  15.                    {  
  16.                        Console.WriteLine("ID:{0},Name:{1}", item.BlogId, item.Name);  
  17.                    }  
  18.                }  
  19.                Console.WriteLine("是否继续?yes/no。将值改回来");  
  20.                if (Console.ReadLine() == "yes")  
  21.                {  
  22.                    int count1 = db.Database.ExecuteSqlCommand("update Blogs set Name = @content where BlogId = @postid"new SqlParameter[] { new SqlParameter("@content""gjp"), new SqlParameter("@postid", 1) });  
  23.                    if (count1 == 1)  
  24.                    {  
  25.                        db.SaveChanges();  
  26.                        Console.WriteLine("sql执行成功");  
  27.                        foreach (var item in db.Blogs)  
  28.                        {  
  29.                            Console.WriteLine("ID:{0},Name:{1}", item.BlogId, item.Name);  
  30.                        }  
  31.                    }  
  32.                    Console.WriteLine("按任意键继续");  
  33.                    Console.ReadKey();  
  34.                }  

3 code first 控制数据库 

1)会在没有数据库时创建一个,这是默认行为

  1. Database.SetInitializer( new CreateDatabaseIfNotExists<BreakAwayContext>());  

2)模型改变时,自动重新创建一个新的数据库

  1. Database.SetInitializer( new DropCreateDatabaseIfModelChanges<BreakAwayContext>());  

3)每次运行时都重新生成数据库

  1. Database.SetInitializer(new DropCreateDatabaseAlways<BreakAwayContext>());  

 3.code first创建

1)首先打开“程序保管理器控制台”

技术分享图片

2)输入"Enable-Migrations",用于启用项目“code frist”迁移

技术分享图片

3)然后创建Model,Context等

public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }

public virtual List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }

public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
public class BloggingContext:DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}

4)此时执行“控制台程序”就行了,ef已帮你自动创建好数据库了

4 把Code First应用于已经存在的数据库

1)创建“Ado.net实体数据模型”

技术分享图片

 

2.选择来自“数据库的code frist”

技术分享图片

3)设置“连接属性”

技术分享图片

4)然后就生成好了,大功告成

技术分享图片

 

















以上是关于EF code frist 使用Linq或者Sql执行的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework使用Code Frist/Model First 还是Database First?

EF Code Frist 删除数据库中的表 再次迁移报错 解决方法参考文档地址

LINQ to SQL 调用 SQL Server 的系统函数

[Linq]使用EF To Linq执行类似sql的in语句

c# ef框架怎么使用linq语句多表查询?

为啥使用 EF / Linq to sql 创建性能不佳的查询如此容易[关闭]