Laden...

Fluent NHibernate: Problem mit One-To-Many Mapping

Erstellt von fluxy vor 11 Jahren Letzter Beitrag vor 11 Jahren 896 Views
F
fluxy Themenstarter:in
183 Beiträge seit 2009
vor 11 Jahren
Fluent NHibernate: Problem mit One-To-Many Mapping

verwendetes Datenbanksystem: SQL Server 2012 Express

Hallo zusammen,

ich habe ein Fachkonzept, das bisher nur aus 2 Klassen besteht. Fahrzeug und Mitarbeiter. Jedes Fahrzeug hat einen Mitarbeiter, der für dieses Fahrzeug verantwortlich ist. Jeder mitarbeiter kann für beliebig viele Fahrzeuge verantwortlich sein.

Ich habe folgende klassen:


public class Fahrzeug
    {
        public virtual int Id { get; set; }
        public virtual string Registration { get; set; }
        public virtual Mitarbeiter Mitarbeiter{ get; set; }

        protected Fahrzeug()
        {
            
        }

        public Fahrzeug(Mitarbeiter mitarbeiter, string registration) 
        {
           Mitarbeiter = responsibleContact;
            Registration = registration;

           MitarbeiterVerbindne(Responsible);
        }

        public virtual void MitarbeiterVerbindne(Mitarbeiter mitarbeiter)
        {
            this.Mitarbeiter = mitarbeiter
            this.Mitarbeiter.Cars.Add(this);
        }
    }


 public class Mitarbeiter 
    {
        public virtual int Id { get; set; }
        public virtual byte[] EncryptedUsername { get; set; }
        public virtual byte[] EncryptedPassword { get; set; }

        public virtual IList<Fahrzeug> Fahrzeuge { get; set; }

        public virtual string Username
        {
            get 
            { 
                var decrypter = UnityContainerProvider.GetInstance().UnityContainer.Resolve<IRijndaelCrypting>();
                return decrypter.DecryptString(EncryptedUsername);
            }
        }

        protected Staffer()
        {
            Fahrzeuge = new List<Fahrzeug>();
        }

        public Staffer(byte[] encryptedUser, byte[] encryptedPassword) : this()
        {
            EncryptedUsername = encryptedUser;
            EncryptedPassword = encryptedPassword;
        }
    }

sowie folgende Mappings


    public class FahrzeugMap : ClassMap<Fahrzeug>
    {
        public FahrzeugMap()
        {
            Id(c => c.Id).GeneratedBy.Native();
            Map(c => c.Modell);
            Map(c => c.Registration);
            Map(c => c.Trademark);
            Map(c => c.EnginePower);

            References(c => c.Mitarbeiter).Not.Nullable();
        }
    }

public class MitarbeiterMap : ClassMap<Mitarbeiter>
    {
        public MitarbeiterMap()
        {
            Id(st => st.Id).GeneratedBy.Native();
            Map(st => st.EncryptedUsername).Column("Username");
            Map(st => st.EncryptedPassword).Column("Password");
            HasMany(st => st.Fahrzeuge).Inverse().AsBag();
           
        }
    }


Problem ist nun folgendes:

Wenn ich über eine Criteria die Liste aller Fahrzeuge abfrage, bekomme ich die richtigen Fahrzeuge zurück. Der Mitarbeiter ist auch korrekt gefüllt. Jedoch ist die Collection im Mitarbeiter, der die Fahrzeuge enthällt, nicht gefüllt.

Kann mir jemand sagen, woran das liegen kann?
BTW: Ich verwende absichtlich kein Cascade!

Vielen Dank,
Fluxy.

G
497 Beiträge seit 2006
vor 11 Jahren

deine Klassenbezeichnungen sind etwas durcheinander. Du hast eine Klasse "Mitarbeiter", im Mapping verwendest du aber eine Klasse "Staffer". Und auch der Konstruktor in der Klasse "Mitarbeiter" deutet darauf hin, dass diese Klasse eigentlich "Staffer" heissen sollte. Wenn das tatsächlich so im Quellcode steht, würde ich erstmal das aufräumen. Ansonsten bitte den geposteten Quellcode korrigieren.

F
fluxy Themenstarter:in
183 Beiträge seit 2009
vor 11 Jahren

Oh sorry, ich hatte die Klassennamen abgeändert -;)
Werde meinen ursprünglichen Code Updaten...