Unable to access data in MVC using Entity Framework - asp.net-mvc

I have a table named Employee in my database PragimTech, and two classes Employee and EmployeeContext in my Models folder.
My connection string in web.config is as follows:
<connectionStrings>
<add name="EmployeeContext" connectionString="data source=GAURAV-PC/SQLEXPRESS; initial catalog=PragimTech; integrated security=SSPI"
providerName="System.Data.SqlClient"/>
When I run my application, i recieve a ProviderIncompatibleException saying
The provider did not return a ProviderManifestToken string
I am unable to find the bug. Please help.

This topic could be helpfull for you.
Check your InnerException for more details about error.

Related

Unable to use two connection string in web.config file. One is EntityConnection string Database first and other one is normal DBConnection

I am facing problem when I am using two connection string in my web.config file.
One connection string is simple DefaultDBConnection which is used for account controller.
Another connection is EntitiesConnection string Database first approach. This connection string is used to process SELECT operation using my stored procedure and this connection string is completely used in separate controller.
When i use both the connection string. Only EntitiesConnection string works and the operations on account controller does not work.
Can any one help me to fix this. I have been searching from past two days but unfortunately i did not find any solution.
Below is my two connection string in web.config.
<add name="DefaultDBConnection" connectionString="Data Source=xyz;Initial Catalog=My_DB;User ID=abc;pwd=abc123" providerName="System.Data.SqlClient" />
<add name="EntitiesConnection" connectionString="metadata=res://*/EntityModel.Model1.csdl|res://*/EntityModel.Model1.ssdl|res://*/EntityModel.Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=xyz;initial catalog=My_DB;user id=abc;password=abc123;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
swap the names in the config make DefaultDBConnection ==EntitiesConnection and EntitiesConnection ==DefaultDBConnection
Check identityModel.cs file in the models folder, whether base name is same as the connection string name,
public ApplicationDbContext()
: base("DefaultDBConnection", throwIfV1Schema: false)
{
}
In the web config;
<add name="DefaultDBConnection" connectionString="Data Source=xyz;Initial
Catalog=My_DB;User ID=abc;pwd=abc123" providerName="System.Data.SqlClient" />

Could not determine storage version error, EF 6 code first

I'm using EF code first approach in MVC and my web.config's connection string looks like-
<connectionStrings>
<add name="SchoolContext" connectionString="XYZ-server;integrated security=True;" providerName="System.Data.SqlClient"/>
</connectionStrings>
And I'm getting following error-
Server Error in '/' Application.
Could not determine storage version; a valid storage connection or a
version hint is required.
I also checked duplicates but none of them worked in my case-
Duplicate question1
Duplicate question2
I solved the issue by looking closely to the connection string, actually data source was missing, correct one is-
<add name="SchoolContext" connectionString="Data Source=XYZ-server;integrated security=True;" providerName="System.Data.SqlClient"/>

Connection string EF Code First

I started an application using Entity Framework Code First.
In my Web.config I added the connection string:
<add name="MyContext" connectionString="Data Source=server\mssqlserver2008;Initial Catalog=dbname;persist security info=True; Integrated Security=SSPI" providerName="System.Data.SqlClient" />
And I received a error when I tried to access my Controller: CREATE DATABASE permission denied in database 'master'
So, I debugged the code and I found that the attribute "ConnectionString" inside my Context it's different from my Web.config:
Data Source=.\\SQLEXPRESS;Initial Catalog=MyProject.Models.MyContext;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE
Why the ConnectionString is wrong??
In your EF initialization code, make sure you specify the connection string name like this
public class MyDbContext : DbContext
{
public MyDbContext() : base("MyContext") {}
}

Splitting an Solution into multiple projects

I created a Black Solution (Arhi) with a ASP.NET MVC 4 Internet project (Arhi.Core) and Class library project for data (Arhi.Data) where I'm storing my EDMX Model.
I added a reference for Arhi.Data into Arhi.Core and I tried to add a Controller with a Model class from Arhi.Data (People entity) and I got this error.
'Unable to retrive metadata for 'Arhi.Core.People'. The specified
named connection is either not found in the configuration, not
inteneded to be used with the EntityClient provider, or not valid.'
Q : Why did I get this error ? Is my approach wrong / any recommendations?
Q2 : If I want to add RDLC reports to my solution, should I also use a Class Library project ?
Connection string from Arhi.Core
<add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-SalvamontMVC-20121108140556;Integrated Security=SSPI" />
and Arhi.Data
<add name="SalvamontEntities" connectionString="metadata=res://*/ModelSalva.csdl|res://*/ModelSalva.ssdl|res://*/ModelSalva.msl;provider=System.Data.SqlClient;provider connection string="data source=www.arhimedes.ro,1433;initial catalog=Salvamont;persist security info=True;user id=sa;password=********;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
in your first connection string not have user name and password if two database deference then give user name and password in first connection string

MVC Entity Framework connection string references other project

I'm doing a Model first approach for a Microsoft MVC application. The solution is named "TutorialPile" divided into two projects, Domain and WebUI. I try to add a controller for the Tutorial object to the WebUI project, and I select the domain class and the DB context. However, I get the error, "Unable to retrieve metadata for TutorialPile.Tutorial. Unable to load the specified metadata resource."
Looking around online it looks like it can't find the edmx object in the connection string in the web.config file. I copied the connection string from the Domain project's app.config file but it still doesn't work. Here are the connection strings from the web.config file.
<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
<add name="TutorialPileModelContainer" connectionString="metadata=res://*/Models.TutorialPileModel.csdl|res://*/Models.TutorialPileModel.ssdl|res://*/Models.TutorialPileModel.msl;provider=System.Data.SqlClient;provider connection string="data source=.\SQLEXPRESS;initial catalog=TutorialPileDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="TutorialPileDbContext" connectionString="metadata=res://*/Models.TutorialPileModel.csdl|res://*/Models.TutorialPileModel.ssdl|res://*/Models.TutorialPileModel.msl;provider=System.Data.SqlClient;provider connection string="data source=.\SQLEXPRESS;initial catalog=TutorialPileDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
And here is the connection string that I copied.
<add name="TutorialPileDBEntities" connectionString="metadata=res://*/TutorialPile.csdl|res://*/TutorialPile.ssdl|res://*/TutorialPile.msl;provider=System.Data.SqlClient;provider connection string="data source=.\sqlexpress;initial catalog=TutorialPileDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
Any ideas on what I need to change?
Make sure...
the edmx file's build action is set to EntityDeploy (select the file and go to the properties window).
Your WebUI project references the Domain project
Edit the connection string on your WebUI project to reference the metadata from the other project. Using * means it can come from any dll. BUT, if your edmx file is inside a folder, you have to map the hierarchy.
Eg:
Path to EDMX: TutorialPile.Domain/Model/TutorialPile.edmx
Connection string: res://*/Model.TutorialPile.csdl|res://*/Model.TutorialPile.ssdl|res://*/Model.TutorialPile.msl
Even better:
The documentation suggests you specify the assembly (for performance reasons) using the full name of the assembly (something like: AdventureWorks, 1.0.0.0, neutral, a14f3033def15840). I couldn't make it work. But, using only the name of the assembly works for me. So, if your domain project outputs a TutotialPile.Domain.dll, you can use:
res://TutorialPile.Domain/Model.TutorialPile.csdl|res://TutorialPile.Domain/Model.TutorialPile.ssdl|res://TutorialPile.Domain/Model.TutorialPile.msl

Resources