EntityFramework 6 и DB2

461
04 февраля 2017, 06:55

При выводе списка в представлении происходит ошибка Поле не найдено: "DB2ConnSettings._bEnableEFCaseSensitivity".

Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода. 
Сведения об исключении: System.MissingFieldException: Поле не найдено: "DB2ConnSettings._bEnableEFCaseSensitivity".
[MissingFieldException: Поле не найдено: "DB2ConnSettings._bEnableEFCaseSensitivity".]
   IBM.Data.DB2.EntityFramework.DB2ProviderServices.GetDbProviderManifestToken(DbConnection connection) +0
   System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) +90
[ProviderIncompatibleException: Поставщик не вернул строку ProviderManifestToken.]
   System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) +258
   System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) +26
[ProviderIncompatibleException: Произошла ошибка при доступе к базе данных. Обычно это означает, что подключение к базе данных установить не удалось. Удостоверьтесь в том, что задана правильная строка подключения, а также в том, что для ее указания используется соответствующий конструктор DbContext, либо найдите ее в файле конфигурации приложения. Дополнительные сведения о DbContext и соединениях см. в статье http://go.microsoft.com/fwlink/?LinkId=386386. Подробные сведения об ошибке см. в описании внутреннего исключения.]
   System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) +82
   System.Data.Entity.Infrastructure.<>c__DisplayClass1.<ResolveManifestToken>b__0(Tuple`3 k) +31
   System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) +62
   System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.ResolveManifestToken(DbConnection connection) +277
   System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest) +72
   System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) +44
   System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) +61
   System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) +123
   System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +616
   System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +18
   System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +53
   System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator() +16
   System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.IEnumerable.GetEnumerator() +54
   ASP._Page_Views_Requests_Create_cshtml.Execute() in D:\projects\RCA_2\RCA_2_VS2015\Views\Requests\Create.cshtml:36
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +177
   System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +80
   System.Web.WebPages.StartPage.RunPage() +47
   System.Web.WebPages.StartPage.ExecutePageHierarchy() +71
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +101
   System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +297
   System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +115
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +248
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +27
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +58
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +349
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +69
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +188
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +124
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +27
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +58
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +30
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +29
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +27
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +48
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +58
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +30
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +21
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +32
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +26
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +40
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +58
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +30
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +21
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +24
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +27
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +48
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +58
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +30
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +21
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +29
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +23
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9744261
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

Так выглядит метод в контроллере:

public ActionResult Create(string returnUrl)
{
    DbConnect db = new DbConnect();
    //Console.WriteLine(((ObjectQuery)db.users).ToTraceString());
    ViewBag.users = db.users;
    ViewBag.ReturnUrl = returnUrl;
    ViewBag.DropDownSign = RequestModel.getSignList();
    return View();
}

Так выглядит подключение:

public class DbConnect : DbContext
{
    public DbSet<Users> users { get; set; }
}

Так выглядит модель:

public class Users
{
    public long Id { get; set; }
    public string Login { get; set; }
}

Так вывод в представлении:

@foreach(Users user in ViewBag.users)
{
    <p>@user.Login</p>
}

Строка подключения в Web.config:

<add name="DbConnect" connectionString="Server=xx.xx.xx.xx;Database=DB;Uid=login;Pwd=pwd;" providerName="IBM.Data.DB2" />

И соответственно провайдер (прописано автоматически при установки пакетов из NuGet):

<provider invariantName="IBM.Data.DB2" type="IBM.Data.DB2.EntityFramework.DB2ProviderServices, IBM.Data.DB2.EntityFramework, Version=10.5.5.6, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />

Что может быть не так?

Answer 1

Сообщение об ошибке содержит следующий текст:

Произошла ошибка при доступе к базе данных. Обычно это означает, что подключение к базе данных установить не удалось. Удостоверьтесь в том, что задана правильная строка подключения, а также в том, что для ее указания используется соответствующий конструктор DbContext, либо найдите ее в файле конфигурации приложения.

Для начала необходимо добавить конструктор в DbConnect, в котором будет вызываться базовый конструктор DbContext куда будет передаваться имя строки подключения из файла конфигурации, откуда будут браться данные для подключения:

public class DbConnect : DbContext
{
    public DbConnect()
        : base("DbConnect")
    { }
    public DbSet<Users> users { get; set; }
}

Если не поможет, то возможно у Вас попросту не достаточно прав у пользователя, который указан в строке подключения. Дайте пользователю из строки подключения больше прав в настройках базы данных.

READ ALSO
PHPUNIT возвращает неверный результат в теста

PHPUNIT возвращает неверный результат в теста

Например есть функция логина:

431
Создание классов

Создание классов

Правильно ли создавать 2 класса в одном файле php?

380
Doctrine | CASE WHEN в SELECT

Doctrine | CASE WHEN в SELECT

Добрый деньСоставляю в Doctrine запрос

444