zoukankan      html  css  js  c++  java
  • 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("
    In 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("
    All 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("
    Tracked 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("
    People: "); 
    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"); 
    }
  • 相关阅读:
    爱生气的书店老板
    数组的度
    最大连续 1 的个数
    最大连续1的个数 III
    尽可能使字符串相等
    Java数据类型转换
    CSS卡片制作
    关于eclipse关联源码问题
    tomcat服务器对于http协议的处理
    shiro源码分析-认证过程
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4668251.html
Copyright © 2011-2022 走看看