@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты

Как прицепить Entity Framework к БД Oracle?

Доброго времени суток, Тостер!
Начал недавно изучать Entity Framework (в рамках изучения MVC) и столкнулся с проблемой: не могу вытащить данные из таблицы. При попытке запустить приложение, выводящее список книг, система пишет: "Oracle.DataAccess.Client.OracleException: ORA-00942: таблица или представление пользователя не существует".

А делаю я следующее: создаю класс Book в папке Models моего MVC-приложения.
namespace MVC4Test.Models
{
    public class Book
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Author { get; set; }
        public decimal Price { get; set; }
    }
}


Затем создаю контекст с помощью ENTITY FRAMEWORK.
using System;
using System.Collections.Generic;
using System.Web;
using System.Data.Entity;

namespace MVC4Test.Models
{
    public class BookContext : DbContext
    {
        public DbSet<Book> BOOKS { get; set; }
        //public DbSet<Purchase> Purchases { get; set; }
    }
}


Затем пытаюсь получить список книг в контроллере и передать его представлению:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVC4Test.Models;

namespace MVC4Test.Controllers
{
    public class HomeController : Controller
    {
        BookContext db = new BookContext();

        public ActionResult Index()
        {
            IEnumerable<Book> books = db.BOOKS;
            ViewBag.Books = books;
            return View();
        }

    }
}


Но у меня ничего не получается. Запуская по шагам, я заметил, что запрос, который отправляется БД составлен как для MS SQL SERVER:
SELECT 
 CAST( "Extent1"."Id" AS number(10,0)) AS "C1", 
"Extent1"."Name" AS "Name", 
"Extent1"."Author" AS "Author", 
"Extent1"."Price" AS "Price"
FROM "dbo"."Books" "Extent1"


Естественно, если я его запускаю в ORACLE, то получаю вышеописанную ошибку. Как можно с этим бороться и есть ли статьи на русском по entity framework для работы с бд ORACLE?
  • Вопрос задан
  • 4440 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dmitryKovalskiy
программист средней руки
1) Мануал прямо на сайте Oracle.com.
2) Вы connectionString как создаете? Там должна быть ересь типа
res://*/Some.csdl|res://*/Some.ssdl|res://*/Some.msl;provider=System.Data.SqlClient;provider connection string="data source=MySQLServer;initial catalog=SomeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"

И в данном коде есть 2 важных пункта для Oracle. 1) неплохо было бы заменить стандартного провайдера .NET на оракловый(Сборки есть на оф.сайте). 2) Переделать строку соединения в формат
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ServerNameOrIP)(PORT=PortNumber)))(CONNECT_DATA=(SERVICE_NAME=DBName)));User Id=MyName;Password=MyPass;""

Еще одна ссылка по теме.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы