2010-11-22 3 views
4

Ich benutze NHibernate zum ersten Mal, wollte aber, wenn möglich, Konfigurationsdateien vermeiden, indem ich NHibernate Fluent verwende. Ich habe ein Projekt-Setup bekam und ich versuche einfach eine Adresse Objekt abfragen, um die folgendenNHibernate w/Fluent - Kein Persister für: [Klasse]

[TestMethod] 
public void TestMethod1() 
{ 
    var cfg = Fluently.Configure() 
     .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.Is("[ConnectionStringHere"))) 
     .Mappings(m => m.FluentMappings.AddFromAssemblyOf<RedSand.Models.Data.Mapping.AddressMapping>()); 

    var sessionFactory = cfg.BuildSessionFactory(); 

    var session = sessionFactory.OpenSession(); 

    session.Get<Address>(new Guid("A8B9BA39-425D-4AE6-A72E-00216ABC87C4")); 
} 

Verwendung jedoch es auf dem Get<T>() Verfahren Sprengung mit einem Fehler über es beschweren kein persister zu sein. Meine Adressklassen sind unten.

public class Address 
{ 
    public Guid AddressId { get; set; } 
    public string AddressType { get; set; } 
    public string StreetAddress { get; set; } 
    public Guid CityId { get; set; } 
    public string PostalCode { get; set; } 
    public bool DefaultAddress { get; set; } 
    public bool TermAddress { get; set; } 
    public string SuiteNumber { get; set; } 
    public float Latitude { get; set; } 
    public float Longitude { get; set; } 
    public int Accuracy { get; set; } 
} 

public class AddressMapping : ClassMap<Address> 
{ 
    public AddressMapping() 
    { 
     Table("tblAddress"); 
     Not.LazyLoad(); 
     Id(a => a.AddressId).Column("AddressID").GeneratedBy.Guid(); 
     Map(a => a.StreetAddress).Column("Address").Length(100); 
     Map(a => a.CityId).Column("CityID"); 
     Map(a => a.PostalCode).Length(50); 
     Map(a => a.DefaultAddress); 
     Map(a => a.TermAddress).Default("0"); 
     Map(a => a.SuiteNumber).Column("SuiteNo").Length(50); 
     Map(a => a.Latitude); 
     Map(a => a.Longitude); 
     Map(a => a.Accuracy); 
    } 
} 

Ich verwende eine vorhandene Datenbank, also versuchen Sie, die funky Tabellenstruktur/Benennung zu ignorieren.

Fehle ich hier etwas? Kann irgendjemand von euch etwas sehen, was erklären würde, warum er sich über einen Nein-Persister beschwert?

+0

Ich habe versucht, dies zu replizieren, und kann es nicht zum Scheitern bringen. Sind Sie sicher, dass Sie nicht zwei separate "Address" -Klassen definiert haben? – mxmissile

+0

Vielleicht sollte ich das Gleiche tun wie du und eine neue Anwendung erstellen und versuchen, meinen eigenen Fehler zu replizieren, vielleicht wurde in meinem aktuellen Projekt etwas mit Referenzen oder etwas vermischt? Würde das den Fehler verursachen? –

Antwort

3

Die Assembly in sollte eine zugeordnete Klasse sein, keine Zuordnungsdatei. Ist Adresse in einer anderen Assembly als AddressMapping? Versuchen Sie, es in AddFromAssemblyOf<YourNamespace.Address> zu ändern.

+0

Der Namespace für die Klasse "Address" wurde bereits vollständig im Aufruf von "AddFromAssemblyOf ()" aufgelöst, also bin ich sicher, dass es kein Problem ist, den Namespace aufzulösen. Früher habe ich die gesamte Assembly hinzugefügt, sie aber auf die eine "Address" -Klasse reduziert, um die Komplexität zu beseitigen. Der Code, den ich benutze, um dies zu testen, ist in einem separaten Projekt. Ja, es ist das Testprojekt, das die MVC-App erstellt hat, aber ich habe es nur in das Testprojekt verschoben, nachdem ich denselben Fehler in der MVC-Anwendung erhalten habe. –

+0

Mist! Ich habe gerade bemerkt, was du meintest. Nicht der Aufruf von 'AddFromAssemblyOf ()', sondern um es vollständig auf die 'Get () 'Methode zu lösen. Es stellte sich heraus, dass ich eine Address-Klasse in einer anderen Referenz definiert hatte, die ich nicht erkannte, und sie wurde auf diese Adresse gesetzt, anstatt auf die, die ich in diesem Projekt erstellt hatte. Ich hasse kleine Käfer wie diese, manchmal braucht es nur einen zweiten Satz von Augen, um es zu klären. –

+0

Eigentlich meine ich die 'AddFromAssemblyOf ' Methode. Aber ich bin froh, dass es dich in die richtige Richtung wies. –