Page 1 of 1

The number of ThisKey columns is different from the number of OtherKey columns for the association property

Posted: Fri 09 Oct 2020 11:37
by dqrest
I have the following mapped classes in C#:

Code: Select all

namespace TypeTreeMapping.BaseClasses.Kernel.T1
{
    [Table(Name = "XX")]
    public class ObjType
    {
        long _No;
        [Column(Name = "NO", Storage = "_No", IsPrimaryKey = true)]
        public long No { get { return _No; } }

        string _Rowid;
        [Column(Name = "ROWID", Storage = "_Rowid", IsPrimaryKey = true)]
        public string Rowid { get { return _Rowid; } }

    }
    [Table(Name = "YY")]
    public class ObjTypeState
    {
        long _No;
        [Column(Name = "NO", Storage = "_No", IsPrimaryKey = true)]
        public long No { get { return _No; } }

        string _Rowid;
        [Column(Name = "ROWID", Storage = "_Rowid", IsPrimaryKey = true)]
        public string Rowid { get { return _Rowid; } }

        long? _ObjTypeNo;
        [Column(Name = "OBJ$TYPE_NO", Storage = "_ObjTypeNo")]
        public long? ObjTypeNo { get { return _ObjTypeNo; } }
    }
}


Code: Select all

namespace Mappings.Kernel.T1
{    
    [Table(Name = "XX")]
    public class ObjType1 : TypeTreeMapping.BaseClasses.Kernel.T1.ObjType
    {
        EntitySet<Mappings.Kernel.T1.ObjTypeState> _ES_ObjTypeStates = new EntitySet<Mappings.Kernel.T1.ObjTypeState>();
        [Association(OtherKey = "ObjTypeNo", Storage = "_ES_ObjTypeStates")]
        public EntitySet<Mappings.Kernel.T1.ObjTypeState> ES_ObjTypeStates { get { return _ES_ObjTypeStates; } }
    }
    
    [Table(Name = "YY")]
    public class ObjTypeState1: TypeTreeMapping.BaseClasses.Kernel.T1.ObjTypeState
    {
        EntityRef<Mappings.Kernel.T1.ObjType> _ER_ObjTypeNo;
        [Association(ThisKey = "ObjTypeNo", Storage = "_ER_ObjTypeNo")]
        public Mappings.Kernel.T1.ObjType E_ObjTypeNo { get { return _ER_ObjTypeNo.Entity; } }
    }
}

Code: Select all

[ProviderAttribute(typeof(Devart.Data.Oracle.Linq.Provider.OracleDataProvider))]
    public class TypeTreeDataContext : DataContext
    {
        public TypeTreeDataContext(OracleConnection conn) : base(conn) { ObjectTrackingEnabled = false; }
        
        public Table<Mappings.Kernel.T1.ObjType1> ObjTypes1;        
        public Table<Mappings.Kernel.T1.ObjTypeState1> ObjTypeStates1;
    }

Now I try to migrate from dotConnect for Oracle 6.60.258 to dotConnect for Oracle 9.13.1098 (trial) in the web-projects.
In 6.60.258 there is possible to use nullable primary keys, but I can not do it in 9.13.1098. That's why to save nullable fields in the mapped classes I use the rowid as a new primary key.

In the example I remove the nullable primary key attribute from the field "ObjTypeNo" of the class "ObjTypeState" and add the rowid field to "ObjTypeState", "ObjType" classes. After running I have the error "The number of ThisKey columns is different from the number of OtherKey columns for the association property 'ES_ObjTypeStates' in the type 'ObjType'".
How to solve this problem?

Re: The number of ThisKey columns is different from the number of OtherKey columns for the association property

Posted: Sat 17 Oct 2020 15:22
by Shalex
You should specify the ThisKey and OtherKey attributes explicitly in all associations. Refer to https://www.devart.com/linqconnect/docs ... pping.html.