开发者

Fluent NHibernate - always drop table

开发者 https://www.devze.com 2023-04-09 04:55 出处:网络
Hi I start learn Fluent NHibernate. I am using this tutorial http://www.d80.co.uk/post/2011/02/20/Linq-to-NHibernate-Tutorial.aspx.

Hi I start learn Fluent NHibernate. I am using this tutorial http://www.d80.co.uk/post/2011/02/20/Linq-to-NHibernate-Tutorial.aspx.

Here is my sample code:

public class Account
{
    public virtual int Id { get; set; }
    public virtual string Nick { get; set; }
    public virtual string Password { get; set; }
}

public class AccountMap:ClassMap<Account>
{
    public AccountMap()
    {
        Id(x => x.Id);
        Map(x => x.Nick);
        Map(x => x.Password);
    }
}

public class  NHiberanteHelper
{
    private static ISessionFactory _sessionFactory;

    private static ISessionFactory SessionFactory
    {
        get
        {
            if (_sessionFactory == null)
                InitializeSessionFactory();

            return _sessionFactory;
        }
    }

    private  static void InitializeSessionFactory()
    {

        _sessionFactory = Fluently.Configure()

            //NHibernate bude pouzivat ovladace pre MS SQL 2008
            .Database(MsSqlConfiguration.MsSql2008
                          .ConnectionString(
                               @"Server=JAN-MSI\SQLEXPRESS;Database=SimpleNHibernate;Trusted_Connection=True;").ShowSql()
                              )

            //urci NHibernatu kde ma hladat mapovacie subory
            .Mappings(m=>m.FluentMappings.AddFromAssemblyOf<Account>())

            //ak tabs nie su v DB vytvori
            .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))

            //vytvori jeden session pre cely life-time apps
            .BuildSessionFactory();
    }

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

class Program
{
    static void Main(string[] args)
    {
        using (var session = NHiberanteHelper.OpenSession())
        {
            using (var trans = session.BeginTransaction())
            {
                var account = new Account
                                  {
                                      Nick = "dfdwf",
                                      Password = "xxx"
                                  };
                session.Save(account);
                trans.Commit();

            }
        }
 开发者_运维百科       Console.ReadKey();
    }
}

Problem is that this Fluent configuration always drop table in database.

I need only check if table doesnt exist so create table not always when code run drop table.


Your call to new SchemaExport(cfg).Create(true, true) is exporting the configuration to the database. This will drop and re-create it (it's not clever enough to work out the differences and just execute them.

You could use SchemaUpdate, which will update the schema instead. Here's a blog post about it: http://geekswithblogs.net/dotnetnomad/archive/2010/02/22/138094.aspx

I would always prefer to update tables myself or use something like Redgate's SQLCompare to update a schema whilst preserving data.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号