我第一次使用Entity框架(代码优先)。我用以下代码创建了一个上下文类。
public class ContactContext : DbContext
{
public ContactContext()
: base("DBConnectionString")
{
Database.SetInitializer<ContactContext>(new DropCreateDatabaseIfModelChanges<ContactContext>());
}
public DbSet<Contact> Contacts { get; set; }
}
Web.config文件:
<add name="ContactMgrDBContext" connectionString="Data Source=(Local);Initial Catalog=ContactsDB;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
控制器类:
public class ContactController : Controller
{
ContactContext db = new ContactContext();
// // GET:/联系人/
public JsonResult ContactList(int? selectedContact)
{
IQueryable<Contact> contacts = db.Contacts;
//contacts.ToList()
var contactsJson = JsonConvert.SerializeObject(contacts.ToList());
return Json(contactsJson, JsonRequestBehavior.AllowGet);
}
当我在调试模式下运行应用程序时,我在此语句中收到以下异常。
var contactsJson = JsonConvert.SerializeObject(contacts.ToList());
EntityFramework.dll中出现“System.Data.ProviderIncompatibleException”类型的异常,但未在用户代码中处理 附加信息:从数据库获取提供程序信息时发生错误。这可能是由实体框架使用不正确的连接字符串引起的。检查内部异常以获取详细信息,并确保连接字符串正确。
联系班级代码:
public class Contact
{
[Key]
public int ContactId { get; set; }
[Required, MaxLength(100)]
public string FirstName { get; set; }
[Required, MaxLength(100)]
public string LastName { get; set; }
public string EMail { get; set; }
public string Phone { get; set; }
public string BusinessName { get; set; }
}
答案 0 :(得分:3)
您的web.config声明一个名为“ContactMgrDBContext”的连接字符串,而您的上下文类引用连接字符串名称“DBConnectionString”。
尝试更新您的上下文类构造函数以使用正确的名称和语法:
public ContactContext()
: base("name=ContactMgrDBContext")
{
Database.SetInitializer<ContactContext>(new DropCreateDatabaseIfModelChanges<ContactContext>());
}
您还尝试使用localdb来处理数据库。我尝试使用您的Data Source=(Local)
名称运行并遇到类似错误。您可能想尝试更新它以使用Data Source=(localdb)\v11.0
,如下所示:
<add name="ContactMgrDBContext" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=ContactsDB;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>