Как вызвать функцию Oracle с EF 6, используя Database First? - PullRequest
0 голосов
/ 17 октября 2019

Я смотрю, как я могу использовать все функции Oracle в Entity Framework. Я проводил некоторые исследования, но большинство информации указывает на то, что функция указана в файле .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 или, может быть, есть ссылка на статью, которая может помочь?

1 Ответ

0 голосов
/ 05 ноября 2019

Я решил это, вызвав функцию как выборку, возвращая единственный результат. Я успешно вызвал довольно сложные функции с несколькими параметрами.

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();
}

Единственная проблема, с которой я столкнулся при таком подходе - это возврат Oracle NUMBER (без указания точности). Это может перегрузить .NET десятичную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...