zoukankan      html  css  js  c++  java
  • 《Entity Framework 6 Recipes》中文翻译——第十章EntityFramework存储过程处理(一)

      在这一章中,我们探讨了一些方案,特别是专注于使用存储过程与实体框架。在这本书中,我们使用存储过程在其他处理方案,但通常他们是在实施插入,更新和删除操作的上下文中。在本章中,我们将向您展示如何使用存储过程所暴露的数据的几种方法。

    返回一个实体集合

    问题

      您希望使用代码第二的方法从存储过程获得实体集合。

    解决方案

      代码第二是指应用代码第一技术来模拟一个现有的数据库模式的做法。让我们说,你有一个POCO模型。

     public class Customer
        {
            public int CustomerId { get; set; }
            public string Name { get; set; }
            public string Company { get; set; }
            public string ContactTitle { get; set; }
        }

    我们还有DbContext类

    public partial class EntitiesContext : DbContext
        {
            public EntitiesContext()
                : base("name=EntitiesContext")
            {
            }
    
            public virtual DbSet<Customer> Customers { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
                modelBuilder.Types<Customer>()
                            .Configure(c =>
                            {
                                c.HasKey(cust => cust.CustomerId);
                                c.Property(cust => cust.CustomerId)
                                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
                                c.Property(cust => cust.Name)
                                 .HasMaxLength(50);
                                c.Property(cust => cust.Company)
                                 .HasMaxLength(50);
                                c.Property(cust => cust.ContactTitle)
                                 .HasMaxLength(50);
                                c.ToTable("Customer");
                            });
    
            }
        }

    在数据库中,我们定义存储过程,返回客户的公司名称和客户的标题了

    create procedure [dbo].[GetCustomers]
    (@Company nvarchar(50),@ContactTitle nvarchar(50))
    as
    begin
    select * from Customer where
    (@Company is null or Company = @Company) and
    (@ContactTitle is null or ContactTitle = @ContactTitle)
    End

    要使用“获取客户存储过程”的模型,做以下操作:

    1、创建一个新的公共方法GetCustomers在DbContext子类,以两个字符串参数,并返回一个客户对象。

     public ICollection<Customer> GetCustomers(string company, string contactTitle)
            {
                throw new NotImplementedException();
            }

    2、GetCustomers()方法通过在数据库的上下文中调用数据库的SQL查询。

    public ICollection<Customer> GetCustomers(string company, string contactTitle)
            {
                return Database.SqlQuery<Customer>("EXEC GetCustomers @Company, @ContactTitle"
                                      , new SqlParameter("Company", company)
                                      , new SqlParameter("Contact Title", contactTitle))
                                      .ToList();
    
            }

    3、在Program中调用

    class Program
        {
            static void Main(string[] args)
            {
                using (var context = new EntitiesContext())
                {
                    var c1 = new Customer
                    {
                        Name = "Robin Steele",
                        Company = "Go Shop Now.com",
                        ContactTitle = "CEO"
                    };
                    var c2 = new Customer
                    {
                        Name = "Orin Torrey",
                        Company = "Go Shop Now.com",
                        ContactTitle = "Sales Manager"
                    };
                    var c3 = new Customer
                    {
                        Name = "Robert Lancaster",
                        Company = "Go Shop Now.com",
                        ContactTitle = "Sales Manager"
                    };
                    var c4 = new Customer
                    {
                        Name = "Julie Stevens",
                        Company = "Go Shop Now.com",
                        ContactTitle = "Sales Manager"
                    };
                    context.Customers.Add(c1);
                    context.Customers.Add(c2);
                    context.Customers.Add(c3);
                    context.Customers.Add(c4);
                    context.SaveChanges();
    
                }
                using (var context = new EntitiesContext())
                {
                    var allCustomers = context.GetCustomers("Go Shop Now.com", "Sales Manager");
                    Console.WriteLine("Customers that are Sales Managers at Go Shop Now.com");
                    foreach (var c in allCustomers)
                    {
                        Console.WriteLine("Customer: {0}", c.Name);
                    }
    
                }
               // Console.ReadKey();
            }
        }

    结果

     

  • 相关阅读:
    java实现操作系统磁盘寻道先来先服务算法
    专业素养:发布文件,别忘了给出校验信息
    vue系列教程-08vue的动画和过渡效果
    vue系列教程-07vue动态绑定样式
    vue系列教程-06vue的事件处理
    vue系列教程-05vue常用指令
    vue系列教程-04vue数据处理和页面渲染
    vue系列教程-03vuejs的结构和生命周期
    vue系列教程-01第一个vue程序
    vue系列教程-02什么是mvvm和spa
  • 原文地址:https://www.cnblogs.com/yunxiaguo/p/5705133.html
Copyright © 2011-2022 走看看