Fließend Nhibernate mit SQL Compact: Schema Issue

Guten Abend Leute,

Ich benutze fließend Nhibernate für eine Weile, ich habe noch nie wirklich zu tief in seine functionalität gegraben oder die vielen Möglichkeiten, wie es konfiguriert werden kann. In jedem projekt habe ich es benutzt habe ich habe es wie folgt konfiguriert:

if (nhConfig == null) { nhConfig = new NHibernate.Cfg.Configuration(); nhConfig.Properties.Add(NHibernate.Cfg.Environment.ProxyFactoryFactoryClass, typeof(NHibernate.ByteCode.LinFu.ProxyFactoryFactory).AssemblyQualifiedName); // This obviously changes depending on what im trying to connect to nhConfig.Properties.Add(NHibernate.Cfg.Environment.ConnectionDriver, typeof(NHibernate.Driver.SqlserverCeDriver).AssemblyQualifiedName); // Configuration is simply an implementation // of an IConfiguration interface nhConfig.Properties.Add(NHibernate.Cfg.Environment.ConnectionString, configuration.ConnectionString); // In this instance, this resolves to // "NHibernate.Dialect.MsSqlCeDialect" nhConfig.Properties.Add(NHibernate.Cfg.Environment.Dialect, configuration.Dialect.AssemblyQualifiedName); nhConfig.Properties.Add(NHibernate.Cfg.Environment.ShowSql, "true"); _sessionFactory = Fluently.Configure(nhConfig) .Mappings(m => m.FluentMappings.AddFromAssembly(configuration.MappingAssembly)) .ExposeConfiguration(x => new SchemaUpdate(x).Execute(false, true)) .BuildSessionFactory(); } 

Entschuldigung für den schlecht formatierten Codeblock … Ich kann nie herausfinden, wie man den Code bearbeitet, sobald man ihn einfügt, ohne die Code-Tags zu deaktivieren.

So wie ich schon sagte, in all meinen anderen Projekten hat dieser configurationscode gut funktioniert. Die database war schon immer eine SQLExpress-database (2005 || 2008) und sollte die Tabelle nicht in der database für die angegebene Entität existieren, dann wird sie automatisch erstellt.

Allerdings ist diesmal eine SQL Compact database erforderlich. Ich habe diese database einfach durch Hinzufügen eines neuen database-Element zu meiner Versammlung (TestingDB.sdf) erstellt und habe tatsächlich eine "Kunde" -Tabelle erstellt.

Jetzt habe ich folgende Unit-Test:

 [Test] public void Function_CanCreateDomainObject() { // Create a fake entity that is mapped Customer fakeCustomer = new Customer(); fakeCustomer.Name = "Function_CanCreateDomainObject"; fakeCustomer.Birthday = DateTime.Now; // Get a DAO for communication IBaseDAO<Customer> customerDao = Container.RequestForType <IBaseDAO<Customer>>(); // Persist the domiain object customerDao.Create(fakeCustomer); // Retrieve it in a new instance Customer retrievedCustomer = customerDao.Read(fakeCustomer.Id); // Compare values for equality Assert.That(retrievedCustomer.Id.Equals(fakeCustomer.Id), "Retrieved entity with Name: " + retrievedCustomer.Name + "(" + retrievedCustomer.Id + ")" + "does not match with original entity with Name: " + fakeCustomer.Name + "(" + fakeCustomer.Id + ")"); } 

Unabhängig von der schlecht gestalteten 'Unit Test' fällt der Test mit folgendem Fehler ab:

 ERROR [TestRunnerThread] SchemaUpdate [(null)]- could not complete schema update System.NotSupportedException: Specified method is not supported. 

Ja, ich habe alle benötigten Baugruppen aus dem SQL Compact Ordner auf meinem C: \ und in der Tat hier ist der seltsame Teil, bei dem Versuch, die Quelle dieses Fehlers zu finden, habe ich natürlich den Unit-Test geprakt und trat durch die Prozedurlinie -by-line Bei zwei Gelegenheiten ist der Test bestanden und die "fakeCustomer" Entität ist in meiner database korrekt beharrt, allerdings 99% der time, wird es mit dem oben genannten Fehler versagen. Der Test ist bestanden, wenn man den Test durchstreift, und wenn er ihn einfach aus der Nunit GUI läuft.

Also, es scheint, wie NHibernate nicht die Tabellenstruktur einer SQL Compact-database auf eigene Faust implizieren kann, was seltsam ist, weil ich die ClassMap-Technik von FNHibernate verwende und du denkst, das wäre genug genug, um ein Tabellenschema zu implizieren. irgendwann mal der Test läuft.

Jede Hilfe der Anleitung sehr geschätzt. Danke für deine time.

Solutions Collecting From Web of "Fließend Nhibernate mit SQL Compact: Schema Issue"

Es tut mir leid, es war dumm von mir, eine solche Frage zu stellen und nicht eine Stapelspur zu hinterlassen. Leider, weil ich gerade dieses Projekt gestartet habe, bin ich nur in der Lage, meinen Code über Unit-Test zu laufen, als Ergebnis fühle ich die Info von Nunit über Testerrors ist nicht ganz so gut wie eine Stack-Trace.

Aus dem Nunit GUI 'Textausgabe' windows

 ***** SolutionName.Testing.DataAccess.Unit.Testing_BaseDAO.Create_CanCreateBaseDAO 

21: 34: 32,929 ERROR [TestRunnerThread] SchemaUpdate [(null)] – konnte das Schema-Update nicht beenden System.NotSupportedException: Die angegebene Methode wird nicht unterstützt.

bei System.Data.Common.DbConnection.GetSchema (String collectionName, String [] restrictionValues)

bei NHibernate.Dialect.Schema.AbstractDataBaseSchema.GetTables (String-Katalog, String schemaPattern, String tableNamePattern, String [] Typen)

bei NHibernate.Tool.hbm2ddl.DatabaseMetadata.GetTableMetadata (String-Name, String-Schema, String-Katalog, Boolean isQuoted)

Aus dem Nunit GUI 'Fehler und Fehler' windows

 at SolutionName.DataAccess.ConnectionProviders.NHibernateConnection.get_Session() in SolutionFolder.SolutionName.DataAccess\ConnectionProviders\NHibernateConnection.cs:line 25 

bei SolutionName.DataAccess.ConnectionProviders.NHibernateConnection.Create [TEntity] (TEntity objectToCreate) in SolutionFolder \ SolutionName.DataAccess \ ConnectionProviders \ NHibernateConnection.cs: Zeile 91 bei SolutionFolder \ SolutionName.DataAccess.BaseDAO`1.Create (T objectToCreate) in SolutionFolder \ SolutionName.DataAccess \ BaseDAO.cs: Zeile 31 bei SolutionName.Testing.DataAccess.Unit.Testing_BaseDAO.Function_CanCreateDomainObject () in SolutionFolder \ SolutionName.Testing \ DataAccess \ Unit \ Testing_BaseDAO.cs: Zeile 46

bei NHibernate.Cfg.Configuration.GenerateSchemaUpdateScript (Dialektdialekt, DatabaseMetadata databaseMetadata bei NHibernate.Tool.hbm2ddl.SchemaUpdate.Execute (Aktion`1 scriptAction, Boolean doUpdate)