Ошибка при использовании Code First в веб-службе «System.Data.ProviderIncompatibleException: поставщик не возвратил строку ProviderManifestToken.» - PullRequest
2 голосов
/ 19 декабря 2011

Я использую Code First. Все отлично работает (вставляет, обновляет, выбирает) все проверено. Проблема возникает, когда я пытаюсь использовать веб-сервисы. Я получаю сообщение об ошибке «System.Data.ProviderIncompatibleException: поставщик не возвратил строку ProviderManifestToken.». Глядя на внутреннее исключение, я получаю это сообщение: «Не удалось определить версию хранилища; требуется действительное соединение с хранилищем или требуется указание версии».

Код веб-сервиса:

/// <summary>
/// Summary description for UserServices
/// </summary>
[WebService(Namespace = "http://localhost:3955/WebServices/UserServices")]
//[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class UserServices : System.Web.Services.WebService
{

    [WebMethod]
    public bool LoginControlPanelUser(string user, string password)
    {
        if(Membership.ValidateUser(user, password))
        {
            return DbUsersDAO.HasAuthenticationType(user, password);
        }
        return false;
    }
}

Код DAO:

    public static bool HasAuthenticationType(string user, string authenticationTypeCode)
    {
        try
        {
            using (VirtusCloudCoreContext ctx = new VirtusCloudCoreContext())
            {
                DBUser User = ctx.DBUsers.SingleOrDefault(u => u.Login.Equals(user) && u.Active.Equals(true));
                if (User != null)
                {
                        return DBAuthenticationTypesDAO.GetById(User.DBAuthenticationTypeId).Name.Equals("Admin");
                }
            }
            return false;

        }
        catch (Exception ex)
        {
            ErrorsHelper.InsertError(ex);
            throw ex;
        }
    }

Класс Context:

    public VirtusCloudCoreContext()
    {
        Database.SetInitializer<VirtusCloudCoreContext>(new VirtusCloudCoreContextInitializer());
        this.Database.Connection.ConnectionString = "Data Source=localhost\SQLEXPRESS;Database=DatabaseName;User Id=******;Password=*******;" ;

    }

Я получаю исключение, когда пытаюсь получить пользователя .... Есть идеи?

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

Эта ошибка часто возникает, когда строка подключения неверна, но я думаю, что в вашем случае это происходит из-за того, что вы пытаетесь вручную установить строку подключения.

Попробуйте сделать свой контекст наследуемым от DbContext и взять строку подключенияв вашем конструкторе, через который он проходит к базовому конструктору, например:

public class VirtualCloudCoreContext : DbContext {
     public VirtualCloudCoreContext(string connectionString) 
             : base (connectionString) {
     }
 }
1 голос
/ 27 июня 2014

Я использую новый EDMX, сгенерированный БД, в веб-проекте VS2012 с отдельным файлом классов - в обоих проектах установлен EF 6.1.1. Несмотря на то, что я использую SQL 2012, мне пришлось напрямую редактировать файл EDMX и изменить его на ProviderManifestToken="2008" с 2012 года.

Не уверен, связан ли он с Telerik Grid / EntityDataSource или нет. Больше упоминаний об этой проблеме здесь , но связанных с VS2013.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...