Frage

Ich habe eine Legacy-Tabelle mit zusammengesetzten Schlüsseln, die 3 anderen Tabellen abgebildet werden, da diese Tabelle in es andere Attribute haben, da es keine einfache Zuordnungstabelle ist, kann ich nicht die many-to-many verwenden Set-Lösung dies abzubilden.

Im Folgenden ist das, was ich getan habe:

<class name="classA" table="A">
<composite-id name="ID" class="AKey">
  <key-many-to-one name="Id_one" class="One" column="Id_one" />
  <key-many-to-one name="Id_two" class="Two" column="Id_two" />
  <key-many-to-one name="Id_three" class="Three" column="Id_three" />
</composite-id>

AKey ist lediglich eine Struktur, die die drei IDs hält, und Id_one, Id_two und Id_three sind alle definiert als int in ihrer jeweiligen Klasse.

public struct Akey {
    public int Id_one { get; set; }
    public int Id_two { get; set; }
    public int Id_three { get; set; }
}

Dieses compiliert in Ordnung, aber wenn ich versuche, es zu laufen, es gibt mir eine Fehlermeldung:

NHibernate.QueryException: Typenkonflikt in NHibernate.Criterion.SimpleExpression: ID erwarteten Typ AKey, tatsächlicher Typ System.Int32

Bitte raten, was ich falsch gemacht haben oder verpasst haben.

Dank einem Haufen!

War es hilfreich?

Lösung

Wenn Sie vorhaben, Schlüssel-many-to-one verwenden würden Sie die Klasse setzen:

public class Akey {
    public virtual One One {get; set;}
    public virtual Two Two {get; set;}
    public virtual Three Three {get; set;}
}

Ansonsten, wenn Sie die Id wollen Sie ordnet sie nur als Eigenschaften classA:

 <composite-id>
     <key-property name="Id_one" column="Id_one" />
     <key-property name="Id_two" column="Id_two" />
     <key-property name="Id_three" column="Id_three" />
 </composite-id>

.

public class classA {
    public virtual int Id_one {get; set;}
    public virtual int Id_two {get; set;}
    public virtual int Id_three {get; set;}

    // ... rest of props ...
}

oder als Verbund wie Sie haben:

 <composite-id name="ID" class="AKey">
     <key-property name="Id_one" column="Id_one" />
     <key-property name="Id_two" column="Id_two" />
     <key-property name="Id_three" column="Id_three" />
 </composite-id>

.

public class AKey {
    public virtual int Id_one {get; set;}
    public virtual int Id_two {get; set;}
    public virtual int Id_three {get; set;}
}

public class classA {
    public virtual AKey ID {get; set;}

    // ... rest of props ...
}

Schließlich ...

 <composite-id>
   <key-many-to-one name="Id_one" class="One" column="Id_one" />
   <key-many-to-one name="Id_two" class="Two" column="Id_two" />
   <key-many-to-one name="Id_three" class="Three" column="Id_three" />
 </composite-id>

.

public class classA {
    public virtual One One {get; set;}
    public virtual Two Two {get; set;}
    public virtual Three Three {get; set;}

    // ... rest of props ...
}

Gehen zum Punt, ob Sie eine Struktur verwenden können, weil ich sie in C # nicht zuständig bin.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top