Я определяю простой Класс Ошибки:
using System;
namespace BugNS.Entities
{
class Bug
{
public virtual int Id { get; private set; }
public virtual int BugNumber { get; set; }
}
}
и простой класс картопостроителя:
using System;
using FluentNHibernate.Mapping;
using BugNS.Entities;
namespace BugNS.Mappings
{
class BugMap : ClassMap<Bug>
{
public BugMap()
{
Id(b => b.Id);
Map(b => b.BugNumber);
}
}
}
и затем просто попытайтесь использовать его как:
using System;
using System.IO;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using BugNS.Entities;
namespace BugNS
{
class Program
{
private const string DbFile = "bugs.db";
static void Main()
{
var sessionFactory = CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
Bug b = new Bug { BugNumber = 121212 };
session.SaveOrUpdate(b);
transaction.Commit();
}
}
}
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(SQLiteConfiguration.Standard
.UsingFile(DbFile))
.Mappings(m =>
m.FluentMappings.AddFromAssemblyOf<Program>())
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
private static void BuildSchema(Configuration config)
{
// delete the existing db on each run
if (File.Exists(DbFile))
File.Delete(DbFile);
// this NHibernate tool takes a configuration (with mapping info in)
// and exports a database schema from it
new SchemaExport(config)
.Create(false, true);
}
}
}
и я получил следующую ошибку:
Необработанное исключение типа 'NHibernate. MappingException' произошел в NHibernate.dll
Дополнительная информация: Никакой стойкий организм для: BugNS.Entities. Ошибка
Я сожалею, но я только что начал учиться Быстрый и NHibernate из документов. Было бы замечательно, если кто-то знает решение этой проблемы, поскольку я уже провожу много часов напрасно.
Уровень доступа класса должен быть публичным , чтобы Fluent мог им воспользоваться.
Попробуйте следующее:
public class Bug
{
public virtual int Id { get; private set; }
public virtual int BugNumber { get; set; }
}
public class BugMap : ClassMap<Bug>
{
public BugMap()
{
Id(b => b.Id);
Map(b => b.BugNumber);
}
}
Это тоже попадание для меня, когда я начал использовать Fluent.
Еще одна вещь, которая обычно идет не так, это пропустить ключевое слово virtual
, которое необходимо для NHibernate, чтобы внести изменения в эти свойства. Приятно, что вы исправили эту часть :)
Надеюсь, это поможет.
Спасибо
.Вам нужно сделать классы Bug и BugMap общедоступными, чтобы NHibernate/Fluent NHibernate мог их видеть.
.