实体框架数据库连接错误

3

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

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

出现了类型为'System.Data.ProviderIncompatibleException'的异常,该异常位于EntityFramework.dll中,但在用户代码中未被处理 附加信息: 在从数据库获取提供程序信息时发生错误。这可能是由于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中。我将为此创建一个单独的问题。谢谢大家的帮助! - raring sunny
这是我另一个问题的链接,与 jqGrid 未呈现数据有关。尽管数据以 JSON 格式从操作方法返回。http://stackoverflow.com/q/30159205/1490250 - raring sunny
1个回答

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

我的错!但即使进行了这个更正,我仍然得到相同的异常。您是否看到代码中还有其他问题? - raring sunny
@raringsunny,我已更新我的回答。看看是否可以帮助你更进一步。 - cmcquillan
我已经通过更正localdb连接信息成功解决了数据库连接异常。如@cmcquillan的回复建议,必须提到v11.0。然而,我的jqGrid控件仍然没有显示任何数据。即使我通过实体框架在新创建的数据库/表中填充数据,也没有列出记录。请参考我的代码,特别是控制器中的public function ContactList。我通过这种方法返回JsonResult。 - raring sunny
@raringsunny,你能否将contacts.ToList()调用移动到序列化方法之外,并将结果设置为一个变量。然后在调试器中运行你的解决方案,并检查服务器上该变量中是否有任何记录?这将帮助你确定问题是出在数据库代码还是序列化步骤上。 - cmcquillan
@raringsunny 如果您能发布“联系人”类的代码,这也可能会有所帮助。 - cmcquillan
我已经验证了数据以JSON格式返回。然而,它没有被jqGrid渲染。要么它不是正确的JSON格式,因为我看到很多'/'斜杠,或者可能是其他原因。如果您能看一下就太好了。我在我的评论中发布了上面的链接。 - raring sunny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接