• 《Entity Framework 6 Recipes》中文翻译——第十章EntityFramework存储过程处理(二)


    返回输出参数

    问题

      您要从存储过程的一个或多个输出参数中检索值。

    解决方案

    假设你有如下关系的表模型

      对于一个给定的日期,你想知道的总租赁次数,总租金支付,和租用车辆。以下存储过程是获得你想要的信息的一种方式。

    create procedure [dbo].[GetVehiclesWithRentals]
    (@date date,
    @TotalRentals int output,
    @TotalPayments decimal(18,2) output)
    as
    begin
      select @TotalRentals = COUNT(*), @TotalPayments = SUM(Payment)
      from Rental
      where RentalDate = @date
    select distinct v.*
      from Vehicle v join Rental r
      on v.VehicleId = r.VehicleId
    end

    1、新建Console Manager.添加Ado.Net 实体数据模型,选择Vehicle和Rental表及GetVehiclesWithRentals存储过程或者在模型设计界面,右击选择添加函数导入如下图所示

    在DbContext中生成方法函数

    public virtual ObjectResult<Vehicle> GetVehiclesWithRentals(Nullable<System.DateTime> date, ObjectParameter totalRentals, ObjectParameter totalPayments)
            {
                var dateParameter = date.HasValue ?
                    new ObjectParameter("date", date) :
                    new ObjectParameter("date", typeof(System.DateTime));
        
                return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Vehicle>("GetVehiclesWithRentals", dateParameter, totalRentals, totalPayments);
            }

    3、在Program类中进行测试

    class Program
        {
            static void Main(string[] args)
            {
                using (var context = new School5Entities1())
                {
                    var car1 = new Vehicle
                    {
                        Matufacture = "Toyota",
                        Model = "Camry",
                        Year = 2013
                    };
                    var car2 = new Vehicle
                    {
                        Matufacture = "Chevrolet",
                        Model = "Corvette",
                        Year = 2013
                    };
                    var r1 = new Rental
                    {
                        Vehicle = car1,
                        RentalDate = DateTime.Parse("5/7/2013"),
                        Payment = 59.95M
                    };
                    var r2 = new Rental
                    {
                        Vehicle = car2,
                        RentalDate = DateTime.Parse("5/7/2013"),
                        Payment = 139.95M
                    };
                    context.Rentals.Add(r1);
                    context.Rentals.Add(r2);
                    context.SaveChanges();
                }
    
                using (var context = new School5Entities1())
                {
                    string reportDate = "5/7/2013";
                    var totalRentals = new ObjectParameter("TotalRentals", typeof(int));
                    var totalPayments = new ObjectParameter("TotalPayments", typeof(decimal));
                    var vehicles = context.GetVehiclesWithRentals(DateTime.Parse(reportDate),
                                     totalRentals, totalPayments);
                    Console.WriteLine("Rental Activity for {0}", reportDate);
                    Console.WriteLine("Vehicles Rented");
                    foreach (var vehicle in vehicles)
                    {
                        Console.WriteLine("{0} {1} {2}", vehicle.Year.ToString(),
                                           vehicle.Matufacture, vehicle.Model);
                    }
                    Console.WriteLine("Total Rentals: {0}",
                          ((int)totalRentals.Value).ToString());
                    Console.WriteLine("Total Payments: {0}", ((decimal)totalPayments.Value).ToString("C"));
                }
    
            }
        }

    运行结果

     

  • 相关阅读:
    MyEclipse连接Oracle,出现ORA00604和ORA12705异常
    MyEclipse连接Oracle,出现ORA00604和ORA12705异常
    SSH Secure Shell Client 乱码问题
    android开发(20) 使用adb建立pc和android设备之间的连接。usb连接方式。
    android开发(22)使用正则表达式 。从一个字符串中找出数字,多次匹配。
    .net 中,使用c# 语言 ,执行exe程序。
    [转载]大数据存取的选择:行存储还是列存储?
    android开发(21)蜂鸣提示音和震动提示的实现。
    arcgis for android 学习 (8) 空间查询 点击某点,选中该点所在单位区域。
    android开发(24)使用SQLiteOpenHelper的onUpgrade实现数据库版本升级
  • 原文地址:https://www.cnblogs.com/yunxiaguo/p/5705255.html
Copyright © 2020-2023  润新知