码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-07-22 22:07:54      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:

使用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 }
View Code

获取追踪对象的详细信息

技术分享
 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 }
View Code

 

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"); 
}

 

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

标签:

原文地址:http://www.cnblogs.com/goodlucklzq/p/4668251.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!