zoukankan      html  css  js  c++  java
  • Linq to Oracle 使用教程(六)将数据库的函数映射到方法

    点击这里返回目录

     

    创建自定义函数和存储过程

    打开 ALinq 安装目录下的 Oracle(ODP)Samples 解决方案,然后运行 Sample3_StoreProcedure 项目,点击 "Click to Create Procedures" 按钮,当然,在运行前你得先修改连接字符串,如果你还没有修改的话。在创建完存储过程后,请将所它们编译。

    将数据库的函数映射到方法

    一、简单函数映射

    我们首先来进行映射的是 Upper 函数,这是一个将字符串转为大写的函数,这个函数的一个输入字符串参数,并且返回也是字符串。

    应该我们可以创建一个如下的方法映射到该函数去。

    代码
    public partial class NorthwindDataContext : ALinq.DataContext
    {
    [ALinq.Mapping.Function(IsComposable
    = true, Name = "UPPER")]
    public string Upper(
    [ALinq.Mapping.Parameter(DbType
    = "VarChar")]
    string text)
    {
    throw new NotSupportedException();
    }
    }

    下面我们来运行一段代码,测试一下。 

    代码
    static void Main(string[] args)
    {
    var dc
    = new NorthwindDataContext()
    {
    Log
    = Console.Out
    };

    var names
    = dc.Products.Select(o => dc.Upper(o.Productname)).ToList();
    foreach (var name in names)
    Console.WriteLine(name);
    }

    运行结果:

    二、返回结果集的函数映射

     在 Server Explorer 面板中,展开 NORTHWIND 连接,并找到 Packages->PKG2->GET_ALL_CATEGORIES 函数。

    我们现在来将它映谢到 DataContext 类的方法。双击打开,代码如下:

    代码
    PACKAGE BODY PKG2 IS
    FUNCTION GET_ALL_CATEGORIES RETURN MYTYPE IS
    MYCS MYTYPE;
    BEGIN
    OPEN MYCS FOR SELECT CATEGORYID, CATEGORYNAME, DESCRIPTION
    FROM CATEGORIES;
    RETURN MYCS;
    END GET_ALL_CATEGORIES;
    END PKG2;

    从代码我们可以看出,它是返回一个数据集,并且是没有参数的,对于返回单一类型的结果集,我们要使用的是 ALinq.ISingleResult<T> 类型。方法定义如下:

    代码
    public partial class NorthwindDataContext : ALinq.DataContext
    {
    [ALinq.Mapping.Function(Name
    = "PKG2.GET_ALL_CATEGORIES")]
    public ALinq.ISingleResult<Category> GetAllCategories()
    {
    var result
    = ExecuteMethodCall(this, (MethodInfo)MethodBase.GetCurrentMethod());
    return (ISingleResult<Category>)result.ReturnValue;
    }
    }

    调用该方法的代码:

    代码
    static void Main(string[] args)
    {
    var dc
    = new NorthwindDataContext() { Log = Console.Out };

    var categories
    = dc.GetAllCategories();
    foreach (var category in categories)
    Console.WriteLine(
    "{0} {1}", category.Categoryid, category.Categoryname);
    }

    运行结果:

    点击这里返回目录

     

  • 相关阅读:
    影视-纪录片:《梵净山》
    NuGet:ServiceStack
    资源-产品:ServiceStack
    Win7x64安装Oracle11201x64 解决PLSQL Developer无法找到oci问题
    Oracle11g环境设置-windows环境
    安装sql server提示挂起报错
    安装oracle11g未找到文件WFMLRSVCApp.ear文件
    配置linux中文
    卸载rpm包提示:error: specifies multiple packages
    FileZilla简单介绍及运用
  • 原文地址:https://www.cnblogs.com/ansiboy/p/1894789.html
Copyright © 2011-2022 走看看