【问题标题】:Entity framework database connection error实体框架数据库连接错误
【发布时间】:2015-05-10 17:14:22
【问题描述】:

我是第一次使用实体框架(代码优先)。我使用以下代码创建了一个上下文类。

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

// // 获取:/联系人/

    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”类型的异常,但未在用户代码中处理 附加信息:从数据库获取提供者信息时出错。这可能是由 Entity Framework 使用不正确的连接字符串引起的。检查内部异常以获取详细信息并确保连接字符串正确。

联系类代码:

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

 }

【问题讨论】:

  • 我正在关闭这个问题,因为数据库连接的原始问题已经解决。我现在面临将数据(json 格式)渲染到 jqGrid 的问题。我将为此创建一个单独的问题。谢谢大家的帮助!
  • 这是我的其他问题的链接,该问题与 jqGrid 未呈现数据有关。即使操作方法以 JSON 格式返回数据。 stackoverflow.com/q/30159205/1490250

标签: entity-framework asp.net-mvc-4


【解决方案1】:

您的 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"/>

【讨论】:

  • 我的错!但即使在进行了这个更正之后,我也得到了同样的例外。您在代码中看到的任何其他问题?
  • @raringsunny 我已经更新了我的答案。看看这是否能让你更进一步。
  • 我已经能够通过更正 localdb 连接信息来解决数据库连接异常。必须按照@cmcquillan 的回复中的建议提及 v11.0。但是,我的 jqGrid 控件仍然不显示任何数据。即使我通过实体框架在新创建的数据库/表中填充数据,也没有列出任何记录。请参考我的代码,尤其是控制器中的公共函数 ContactList。我正在通过这个方法返回 JsonResult。
  • @raringsunny 您能否将contacts.ToList() 调用移到序列化方法之外并将结果设置为变量。然后在调试器中运行您的解决方案并检查服务器上该变量中是否有任何记录?这将帮助您确定问题出在您的数据库代码还是序列化步骤。
  • @raringsunny 如果您发布 Contact 课程的代码也可能会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 2013-10-13
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多