Ich erhalte die folgende Fehlermeldung, ich habe den Code und die Verbindungszeichenfolge eingefügt. Ich benutze PetaPoco zum ersten Mal.

Circular base class dependency involving 'PetaPoco.DatabaseConfiguration' and 'PetaPoco.DatabaseConfiguration.IBuildConfigurationSettings'  

Es folgt die Verbindungszeichenfolge:

 <add name="PriceCheckString" connectionString="Data Source=.;Initial     Catalog=PriceCheck;Integrated Security=SSPI;"
     providerName="System.Data.SqlClient"/>

Es folgt die Codezeile

      Database priceCheck = new Database("PriceCheckString");
      var ItemPrice = priceCheck.Query<ItemPrice>("SELECT * FROM itemPrice");
2
Gainster 4 Jän. 2016 im 05:34

2 Antworten

Beste Antwort

Ich hatte das gleiche Problem und konnte es lösen. Sie müssen die Schnittstellendeklaration außerhalb der Datenbankkonfigurationsklasse verschieben.

Ersetzen Sie in PetaPoco.cs Ihre DatabaseConfiguration-Klassendeklaration durch den folgenden Code:

public interface IBuildConfigurationSettings
{
    /// <summary>
    ///     Sets the setting against the specified key.
    /// </summary>
    /// <param name="key">The setting's key.</param>
    /// <param name="value">The setting's value.</param>
    void SetSetting(string key, object value);

    /// <summary>
    ///     Tries to get the setting and calls the <paramref name="setSetting" /> to set the value if found.
    /// </summary>
    /// <typeparam name="T">The setting type.</typeparam>
    /// <param name="key">The setting's key.</param>
    /// <param name="setSetting">The set setting callback.</param>
    /// <param name="onFail">The on fail callback, called when no setting can be set.</param>
    void TryGetSetting<T>(string key, Action<T> setSetting, Action onFail = null);
}

/// <summary>
///     A helper class which enables fluent configuration.
/// </summary>
public class DatabaseConfiguration : IDatabaseBuildConfiguration, IBuildConfigurationSettings, IHideObjectMethods
{
    private readonly IDictionary<string, object> _settings = new Dictionary<string, object>();

    /// <summary>
    ///     Private constructor to force usage of static build method.
    /// </summary>
    private DatabaseConfiguration()
    {
    }

    /// <summary>
    ///     Starts a new PetaPoco build configuration.
    /// </summary>
    /// <returns>An instance of <see cref="IDatabaseBuildConfiguration" /> to form a fluent interface.</returns>
    public static IDatabaseBuildConfiguration Build()
    {
        return new DatabaseConfiguration();
    }

    public void SetSetting(string key, object value)
    {
        // Note: no argument checking because, pref, enduser unlikely and handled by RT/FW
        if (value != null)
            _settings[key] = value;
        else
            _settings.Remove(key);
    }

    public void TryGetSetting<T>(string key, Action<T> setSetting, Action onFail = null)
    {
        // Note: no argument checking because, pref, enduser unlikely and handled by RT/FW
        object setting;
        if (_settings.TryGetValue(key, out setting))
            setSetting((T) setting);
        else if (onFail != null)
            onFail();
    }
}

Sie müssen außerdem Folgendes suchen / ersetzen (in derselben PetaPoco.cs-Datei):

Find: ((DatabaseConfiguration.IBuildConfigurationSettings) source) .SetSetting (Schlüssel, Wert);

Ersetzen durch: ((IBuildConfigurationSettings) Quelle) .SetSetting (Schlüssel, Wert);

3
KyleBoxCrush 4 Jän. 2016 im 20:05

Dies wurde in der neuesten Version behoben. Versionen 5.1.114 oder 5.1.109-beta und höher

Weitere Informationen finden Sie im PetaPoco-Problem.

0
Plebsori 14 Jän. 2016 im 09:35