Entity Framework - ожидая непустую строку для параметра providerInvariantName
Хорошо, это не может быть связано с EF. Я пытаюсь использовать функцию code-first, и следующее - это то, что я написал: -
var modelBuilder = new ModelBuilder();
var model = modelBuilder.CreateModel();
using (AddressBook context = new AddressBook(model))
{
var contact = new Contact
{
ContactID = 10000,
FirstName = "Brian",
LastName = "Lara",
ModifiedDate = DateTime.Now,
AddDate = DateTime.Now,
Title = "Mr."
};
context.contacts.Add(contact);
int result = context.SaveChanges();
Console.WriteLine("Result :- "+ result.ToString());
}
Класс контекста: -
public class AddressBook : DbContext
{
public AddressBook()
{ }
public AddressBook(DbModel AddressBook)
: base(AddressBook)
{
}
public DbSet<Contact> contacts { get; set; }
public DbSet<Address> Addresses { get; set; }
}
и строка подключения: -
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="AddressBook" connectionString="Data Source=MyMachine;Initial Catalog=AddressBook;Integrated Security=True;MultipleActiveResultSets=True;providerName=System.Data.SqlClient"/>
</connectionStrings>
</configuration>
Итак, имя базы данных - "Адресная книга", и ошибка возникает, когда я инициализирую объект AddressBook. Я вижу, что люди предлагают добавить (providerName = "System.Data.SqlClient" ) в строку подключения. Но это не работает в моем случае. Я что-то пропустил здесь?
Ответы
Ответ 1
Вы должны добавить System.Data.SqlClient в качестве значения для нового атрибута с именем "Имя поставщика". Как показано ниже: -
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="AddressBook" providerName="System.Data.SqlClient" connectionString="Data Source=MyMachine;Initial Catalog=AddressBook;Integrated Security=True;MultipleActiveResultSets=True;"/>
</connectionStrings>
</configuration>
Ответ 2
У меня была такая же ошибка, когда я загрузил свой сайт на производственный сервер. Моя строка подключения имела свойство providerName
. Конкурентом проблемы была строка подключения в machine.config
с именем LocalSqlServer
и поставщик ролей, который использовал эту строку подключения:
<roleManager>
<providers>
<add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
....
Таким образом, все, что мне нужно было сделать, это очистить строки подключения и роль поставщиков до регистрации моего:
<connectionStrings>
<clear/>
<add name="DbEntities" connectionString="..." providerName="System.Data.SqlClient" />
</connectionStrings>
...
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
<providers>
<clear/>
<add name="DefaultRoleProvider" ... />
</providers>
</roleManager>