簡體   English   中英

使用 NHibernate 和 FluentNHibernate 創建數據庫和表?

[英]Create Database and Tables with NHibernate and FluentNHibernate?

我正在尋找使用 NHibernate 和 FluentNHibernate 創建databasetables任何方法。

我怎么能這樣做?

嘗試。

private static ISessionFactory createConnection()
{
    if (session != null)
        return session;

    //database configs
    FluentConfiguration _config = Fluently.Configure().Database(
        MySQLConfiguration.Standard.ConnectionString(
            x => x.Server(HOST).
            Username(USER).
            Password(PASSWORD).
            Database(DB)
        ))
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<PerfilMap>())
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ModuloMap>())
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<PermissaoMap>())
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<UsuarioMap>())
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<CategoriaMap>())
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<SubcategoriaMap>    ())
        .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true));

    session = _config.BuildSessionFactory();
    return session;
}

NHibernate 和 FNH 都不創建數據庫本身。 您必須自己提供代碼或預先創建的數據庫。 但它可以為您創建表格。 執行此操作的類稱為SchemaExport 在 Fluent 中,它看起來像這樣:

var sessionFactory = Fluently.Configure()
   .Database(/* ... */)
   .Mappings(/* ... */)
   .ExposeConfiguration(cfg => new SchemaExport(cfg).Execute(true, true, false))
   .BuildSessionFactory();

無恥地從這個 SO 問題復制。

一個完整的實現可能是:

對於像Genre這樣的實體類,將有一個像GenreMap這樣的映射類。 還有一個通用的 nhibernate helper 類,用於獲取到 db(SessionFactory) 類的會話,用於將所有實體映射到數據庫:

public class Genre
{
    public virtual int GenreId { get; set; }
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
}

public class GenreMap : ClassMap<Genre>
{
    public GenreMap()
    {
        Id(x => x.GenreId).Column("Id");
        Map(x => x.Name);
        Map(x => x.Description);
        Table("Genres");
    }
}

最后在 SessionFactory 類中:

public static class SessionFactory
{
    private static ISessionFactory _factory;

    public static ISession OpenSession()
    {
        return _factory.OpenSession();
    }

    public static void Init(string connectionString)
    {
        _factory = BuildSessionFactory(connectionString);
    }

    private static ISessionFactory BuildSessionFactory(string connectionString)
    {
        ISessionFactory sessionFactory = Fluently
            .Configure()
            .Database(PostgreSQLConfiguration.PostgreSQL81
                .ConnectionString(c => c.Is(connectionString))
                .ShowSql())

            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<GenreMap>())
            .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))
            .BuildSessionFactory();

        return sessionFactory.OpenSession();
    }
}

用法如下:

public ActionResult Index()
{
    using (ISession session = SessionFactory.OpenSession())
    {
        var persons = session.Query<Genre>().ToList();

        return View(persons);
    }
}

在啟動類中:

SessionFactory.Init(connectionString);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM