EF中执行原生sql与使用Local获取本地数据

使用DbSet的Local属性可以访问当前context中被追踪且没有被标记为删除的实体(内存中的数据)

 1 using (var context = new BloggingContext())
 2 {
 3     // Load all blogs from the database into the context
 4     context.Blogs.Load();
 5
 6     // Add a new blog to the context
 7     context.Blogs.Add(new Blog { Name = "My New Blog" });
 8
 9     // Mark one of the existing blogs as Deleted
10     context.Blogs.Remove(context.Blogs.Find(1));
11
12     // Loop over the blogs in the context.
13     Console.WriteLine("In Local: ");
14     foreach (var blog in context.Blogs.Local)
15     {
16         Console.WriteLine(
17             "Found {0}: {1} with state {2}",
18             blog.BlogId,
19             blog.Name,
20             context.Entry(blog).State);
21     }
22
23     // Perform a query against the database.
24     Console.WriteLine("\nIn DbSet query: ");
25     foreach (var blog in context.Blogs)
26     {
27         Console.WriteLine(
28             "Found {0}: {1} with state {2}",
29             blog.BlogId,
30             blog.Name,
31             context.Entry(blog).State);
32     }
33 }

获取追踪对象的详细信息

 1 using (var context = new BloggingContext())
 2 {
 3     // Load some entities into the context
 4     context.Blogs.Load();
 5     context.Authors.Load();
 6     context.Readers.Load();
 7
 8     // Make some changes
 9     context.Blogs.Find(1).Title = "The New ADO.NET Blog";
10     context.Blogs.Remove(context.Blogs.Find(2));
11     context.Authors.Add(new Author { Name = "Jane Doe" });
12     context.Readers.Find(1).Username = "johndoe1987";
13
14     // Look at the state of all entities in the context
15     Console.WriteLine("All tracked entities: ");
16     foreach (var entry in context.ChangeTracker.Entries())
17     {
18         Console.WriteLine(
19             "Found entity of type {0} with state {1}",
20             ObjectContext.GetObjectType(entry.Entity.GetType()).Name,
21             entry.State);
22     }
23
24     // Find modified entities of any type
25     Console.WriteLine("\nAll modified entities: ");
26     foreach (var entry in context.ChangeTracker.Entries()
27                               .Where(e => e.State == EntityState.Modified))
28     {
29         Console.WriteLine(
30             "Found entity of type {0} with state {1}",
31             ObjectContext.GetObjectType(entry.Entity.GetType()).Name,
32             entry.State);
33     }
34
35     // Get some information about just the tracked blogs
36     Console.WriteLine("\nTracked blogs: ");
37     foreach (var entry in context.ChangeTracker.Entries<Blog>())
38     {
39         Console.WriteLine(
40             "Found Blog {0}: {1} with original Name {2}",
41             entry.Entity.BlogId,
42             entry.Entity.Name,
43             entry.Property(p => p.Name).OriginalValue);
44     }
45
46     // Find all people (author or reader)
47     Console.WriteLine("\nPeople: ");
48 //返回所有实现IPerson接口的类的Name属性值
49     foreach (var entry in context.ChangeTracker.Entries<IPerson>())
50     {
51         Console.WriteLine("Found Person {0}", entry.Entity.Name);
52     }
53 }
54
55
56 public class Author : IPerson
57 {
58     public int AuthorId { get; set; }
59     public string Name { get; set; }
60     public string Biography { get; set; }
61 }
62
63 public class Reader : IPerson
64 {
65     public int ReaderId { get; set; }
66     public string Name { get; set; }
67     public string Username { get; set; }
68 }
69
70 public interface IPerson
71 {
72     string Name { get; }
73 }

EF中执行原生的sql语句

1.在指定实体上进行查询

using (var context = new BloggingContext())
{
    var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList();
}

2.执行存储过程

using (var context = new BloggingContext())
{
    var blogs = context.Blogs.SqlQuery("dbo.GetBlogs").ToList();
}

//带参数的存储过程
using (var context = new BloggingContext())
{
    var blogId = 1; 

    var blogs = context.Blogs.SqlQuery("dbo.GetBlogById @p0", blogId).Single();
}

3.执行sql命令

using (var context = new BloggingContext())
{
    var blogNames = context.Database.SqlQuery<string>(
                       "SELECT Name FROM dbo.Blogs").ToList();
}

using (var context = new BloggingContext())
{
    context.Database.SqlCommand(
        "UPDATE dbo.Blogs SET Name = ‘Another Name‘ WHERE BlogId = 1");
}
时间: 2024-10-10 18:30:07

EF中执行原生sql与使用Local获取本地数据的相关文章

asp.net EF框架执行原生SQL语句

1.执行无参数sql: string sql = "select * from IntegralInfo where convert(nvarchar,getdate(),23)='{0}' and status=1 and userinfoid='{1}'"; sql = string.Format(sql, DateTime.Now.ToString("yyyy-MM-dd"), uid); var IntegralInfoObj = db.Database.S

django中使用原生sql

在Django中使用原生Sql主要有以下几种方式: 一:extra:结果集修改器,一种提供额外查询参数的机制 二:raw:执行原始sql并返回模型实例 三:直接执行自定义Sql ( 这种方式完全不依赖model,前两种还是要依赖于model ) 实例: 使用extra: 1:Book.objects.filter(publisher__name='广东人员出版社').extra(where=['price>50']) Book.objects.filter(publisher__name='广东

在Django中使用原生Sql

在Django中使用原生Sql主要有以下几种方式: 一:extra:结果集修改器,一种提供额外查询参数的机制 二:raw:执行原始sql并返回模型实例 三:直接执行自定义Sql(这种方式完全不依赖model,前两种还是要依赖于model) 实例: 使用extra: 1:Book.objects.filter(publisher__name='广东人员出版社').extra(where=['price>50']) Book.objects.filter(publisher__name='广东人员出

python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)

12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm_demo.settings") import django django.setup() # 启动Django项目 from app01 import models #返回QuerySet对象的方法: r

Django框架08 /聚合查询、分组、F查询和Q查询、执行原生sql、设置 sql_mode

目录 Django框架08 /聚合查询.分组.F查询和Q查询.执行原生sql.设置 sql_mode 1.聚合查询 2.分组 3.F查询和Q查询 4.执行原生sql(了解) 5.展示sql的 6.设置 sql_mode Django框架08 /聚合查询.分组.F查询和Q查询.执行原生sql.设置 sql_mode 1.聚合查询 aggregate(*args, **kwargs) aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典.键的名称是聚合值

EF中执行存储过程

SqlParameter[] parms = new SqlParameter[5]; SqlParameter parms0 = new SqlParameter("IsAll", int.Parse(parames.P1)); //生成一个参数并给参数赋值. SqlParameter parms1 = new SqlParameter("ForumId", int.Parse(parames.P2)); SqlParameter parms2 = new Sql

存储过程中执行动态Sql语句

存储过程中执行动态Sql语句 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能,还可以编写更安全的代码.EXEC在某些情况下会更灵活.除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql. 1.EXEC的使用 EXEC命令有两种用法,一种是执行一个存储

【Django】执行原生SQL的三种方法 &#632542;

原文: http://blog.gqylpy.com/gqy/383 "> 如下三种方式 extra:结果集修改器,一种提供额外查询参数的机制 raw:执行原始SQL返回模型实例 connection/connections:直接执行自定义SQL(此方法不依赖model) 1.extra示例: # extra # 在QuerySet的基础上继续执行子语句 # extra(self, select=None, where=None, params=None, tables=None, ord

EF中执行sql语句

EF原理 EF 会自动把 Where().OrderBy().Select()等这些编译成"表达式树(Expression Tree)",然后会把表达式树翻译成 SQL 语句去执行.(编译原理,AST)因此不是"把数据都取到内存中,然后使用集合的方法进行数据过滤",因此性能不会低.但是如果这个操作不能被翻译成 SQL 语句,则或者报错,或者被放到内存中操作,性能就会非常低 跟踪EF的查询Sql语句: DbContext 有一个 Database 属性,其中的 Log