Petapoco не может найти точку разделения - PullRequest
0 голосов
/ 10 сентября 2018

У меня ошибка, которую я не могу понять. Я проверил, что модели соответствуют таблицам базы данных, но все же я получаю сообщение об ошибке, которое заставляет меня думать

System.InvalidOperationException: Не удалось найти точку разделения между App.Model.SimCarBox и App.Model.MonoSimCar

Это метод PetaPoco, в котором выдается ошибка:

// Find the split point in a result set for two different pocos and return the poco factory for the first
        Delegate FindSplitPoint(Type typeThis, Type typeNext, string sql, IDataReader r, ref int pos)
        {

            // Last?
            if (typeNext == null)
                return PocoData.ForType(typeThis).GetFactory(sql, _sharedConnection.ConnectionString, ForceDateTimesToUtc, pos, r.FieldCount - pos, r);

            // Get PocoData for the two types
            PocoData pdThis = PocoData.ForType(typeThis);
            PocoData pdNext = PocoData.ForType(typeNext);

            // Find split point
            int firstColumn = pos;

            //var usedColumns = new Dictionary<string, bool>();  // <--- original (nuget.org Petapoco 5.1.140)
            var usedColumns = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);  // <--- my fix

            for (; pos < r.FieldCount; pos++)
            {
                // Split if field name has already been used, or if the field doesn't exist in current poco but does in the next
                string fieldName = r.GetName(pos);
                if (usedColumns.ContainsKey(fieldName) || (!pdThis.Columns.ContainsKey(fieldName) && pdNext.Columns.ContainsKey(fieldName)))
                {
                    return pdThis.GetFactory(sql, _sharedConnection.ConnectionString, ForceDateTimesToUtc, firstColumn, pos - firstColumn, r);
                }
                usedColumns.Add(fieldName, true);
            }

            throw new InvalidOperationException(string.Format("Couldn't find split point between {0} and {1}", typeThis, typeNext));
        }

Данные модели

SIMCARBOX

[DataContract]
public class SimCarBox
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string BachTimber { get; set; }

    [DataMember]
    public int BoxTimber { get; set; }

    [DataMember]
    public SimCarClassification Classification { get; set; }

    [DataMember]
    public NetType? NetType { get; set; }

    [DataMember]
    public NewarkProvider NewarkProvider { get; set; }

    [DataMember]
    public SimCarFormFactor FormFactor { get; set; }
}

MONOSIMCAR

[DataContract]
public class MonoSimCar : ICopyable<MonoSimCar>
{

    [DataMember]
    public long Id { get; set; }

    [DataMember]
    public string IccId { get; set; }

    [DataMember]
    public string Imsi { get; set; }

    [DataMember]
    public string Pun1 { get; set; }

    [DataMember]
    public string Pun2 { get; set; }

    [DataMember]
    public string Puc1 { get; set; }

    [DataMember]
    public string Puc2 { get; set; }

    [DataMember]
    public MonoSimCarBox Box { get; set; }

    [DataMember]
    public SimCarStatus Status { get; set; }

    [DataMember]
    public string Number { get; set; }

    public MonoSimCar Copy(bool clearIdentifier = true)
    {
        var instance = (MonoSimCar)MemberwiseClone();
        if (clearIdentifier) instance.Id = default(int);
        return instance;
        }
    }

ЗДЕСЬ ИСПОЛЬЗУЕТСЯ SQL

select   Activation.*,   SimCar.*,    SimCarNumber.Number,    
SimCarBox.* from [Activation] left join [SimCar] on SimCar.Id = 
Activation.SimCarId left join [SimCarBox] on SimCarBox.Id = SimCar.BoxId left 
join [SimCarNumber] on [SimCarNumber].IccId = [SimCar].IccId where 
SubscriptionId in (@0) and Activation.ProvisioningStatus <> @1.

И, как я сказал, выдает это сообщение об ошибке, которое не имеет смысла для меня.

Не удалось найти точку разделения между App.Model.SimCarBox и App.Model.MonoSimCar

...