Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何先使用数据库调用带有EF 6的Oracle函数?_C#_Oracle_Entity Framework 6 - Fatal编程技术网

C# 如何先使用数据库调用带有EF 6的Oracle函数?

C# 如何先使用数据库调用带有EF 6的Oracle函数?,c#,oracle,entity-framework-6,C#,Oracle,Entity Framework 6,我想看看如何在Entity框架内实现所有Oracle功能。我一直在做一些研究,但大多数信息都指向确保该函数列在.edmx文件中。问题是,我使用的是数据库优先的方法,对于Oracle驱动程序,我看不到存储的进程或函数,所以我没有使用.emdx文件 我发现一篇文章显示如何手动将函数添加到我的DataContext文件中。我试图遵循这段代码,但我得到一个错误,它不知道“FunctionsConvention”。这是我放在DataContext中的内容 protected override void O

我想看看如何在Entity框架内实现所有Oracle功能。我一直在做一些研究,但大多数信息都指向确保该函数列在.edmx文件中。问题是,我使用的是数据库优先的方法,对于Oracle驱动程序,我看不到存储的进程或函数,所以我没有使用.emdx文件

我发现一篇文章显示如何手动将函数添加到我的DataContext文件中。我试图遵循这段代码,但我得到一个错误,它不知道“FunctionsConvention”。这是我放在DataContext中的内容

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Add(new FunctionsConvention("dbo", this.GetType()));
        }

        [DbFunction("CodeFirstDatabaseSchema", "LatLongDistanceCalc")]
        public static int LatLongDistanceCalc(int fromLat, int fromLong, int toLat, int toLong)
        {
            // no need to provide an implementation
            throw new NotSupportedException();
        }

有人知道我如何将函数添加到EF中,或者有一篇文章的链接可以提供帮助吗?

我将函数作为select调用,返回一个结果,从而解决了这个问题。我成功地调用了具有多个参数的非常复杂的函数

public string ExecuteMyOracleFunction(string myParameter) {
  var command = @"select MyFunc(:my_param) from dual";
  using (var context = new DatabaseContext())
    return context.Database.SqlQuery<string>(command, myParameter).SingleOrDefault();
}
公共字符串ExecuteMyOracleFunction(字符串myParameter){
var command=@“从双参数中选择MyFunc(:my_param)”;
使用(var context=new DatabaseContext())
返回context.Database.SqlQuery(command,myParameter).SingleOrDefault();
}

这种方法的唯一问题是返回一个Oracle
数字(没有指定任何精度)。这可能会导致.NET十进制数过载。

我通过将函数作为select调用并返回单个结果来解决这个问题。我成功地调用了具有多个参数的非常复杂的函数

public string ExecuteMyOracleFunction(string myParameter) {
  var command = @"select MyFunc(:my_param) from dual";
  using (var context = new DatabaseContext())
    return context.Database.SqlQuery<string>(command, myParameter).SingleOrDefault();
}
公共字符串ExecuteMyOracleFunction(字符串myParameter){
var command=@“从双参数中选择MyFunc(:my_param)”;
使用(var context=new DatabaseContext())
返回context.Database.SqlQuery(command,myParameter).SingleOrDefault();
}
这种方法的唯一问题是返回一个Oracle
数字(没有指定任何精度)。这可能会导致.NET十进制数过载