Я пытаюсь вставить объект в базу данных SQLite InMembory следующим образом:
private void button1_Click(object sender, EventArgs e)
{
var sessionFactory = CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
Person p = new Person { Age = 25, FirstName = "Dariusz", LastName = "Smith" };
session.SaveOrUpdate(p);
//transaction.Commit();
}
}
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(
SQLiteConfiguration.Standard.InMemory().ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Person>())
.BuildSessionFactory();
}
Но я получаю ОШИБКУ: "SQLite error\r\nno such table: Person"
Только для разъяснения: Я использую опцию InMemory.
Я также использую FluentNhibernate с отображением:
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
//Table("Person") doesn't resolve my problem
Id(x => x.Id);
Map(x => x.FirstName);
Map(x => x.LastName);
Map(x => x.Age);
}
}
Что я делаю неправильно?Заранее спасибо.
Вам необходимо создать структуры таблицы перед отправкой любых запросов. Один из способов сделать это использовать nhibernate.tool.hbm2ddl.schemaexport
. Вы можете взглянуть на в этом примере . Еще один способ сделать это вручную. Создать таблицу человека ...
. Конечно, преимущество SchemaExport
заключается в том, что если вы измените свои сопоставления, он автоматически отражается на сгенерированной схеме базы данных.
Как сказал Дарин Димитров, вам нужно экспортировать схему. К счастью, есть хороший способ сделать это, используя свободные NH :)
return Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory().ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Person>())
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
... где buildschema - это метод:
private void BuildSchema(Configuration cfg)
{
new SchemaExport(cfg)
.Create(false, true);
}