0

我通过观看来自 http://www.d80.co.uk/post/2011/10/06/NHibernate-Video-Tutorial.aspx 网站的视频创建了一个控制台应用程序。当我尝试执行代码时,它给了我以下错误:

创建 SessionFactory 时使用了无效或不完整的配置。检查 PotentialReasons 集合和 InnerException 了解更多详细信息。

但是当我下载代码并执行时,它工作正常。我已经检查了两个代码并且是相同的。所以不明白我做错了什么。我在这里发布我的代码,请帮助我摆脱这种情况。

NhibernateHelper.cs

using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
using System;

namespace FluentNHibernate
{    
    class NhibernateHelper
    {
        private static ISessionFactory _sessionFactory;

        private static ISessionFactory sessionFactory
        {
            get
            {
                if (_sessionFactory == null)
                {
                    initialisationFactory();
                }

                return _sessionFactory;
            }

        }
        private static void initialisationFactory()
        {
            try
            {
                _sessionFactory = Fluently.Configure()
                                    .Database(MsSqlConfiguration.MsSql2005.ConnectionString(@"Server=10.10.10.7;Database=TestDatabase;uid=sa;pwd=9ijnhy6;Trusted_Connection=false;").ShowSql())
                                    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Car>())
                                    .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))
                                    .BuildSessionFactory();
            }
            catch (Exception e)
            {

                throw;
            }

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

    }
}

程序.cs

using System;
using FluentNHibernate.Mapping;
namespace FluentNHibernate
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            using (var session = NhibernateHelper.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    var fordMake = new Make
                    {
                        Name = "Ford"
                    };
                    var fiestaModel = new Model
                    {
                        Name = "Fiesta",
                        Make = fordMake
                    };

                    var car = new Car
                    {
                        Make = fordMake,
                        Model = fiestaModel,
                        Title = "Dans Car"
                    };

                    session.Save(car);

                    transaction.Commit();

                    Console.WriteLine("Created Car " + car.Title);
                }
            }
            Console.ReadLine();
        }
    }
    public class MakeMap : ClassMap<Make>
    {
        public MakeMap()
        {
            Id(x => x.Id);
            Map(x => x.Name);
        }
    }
    public class ModelMap : ClassMap<Model>
    {
        public ModelMap()
        {
            Id(x => x.Id);
            Map(x => x.Name);
            References(x => x.Make).Cascade.All();
        }
    }
    public class CarMap : ClassMap<Car>
    {
        public CarMap()
        {
            Id(x => x.Id).GeneratedBy.HiLo("Car");
            Map(x => x.Title);
            References(x => x.Make).Cascade.All();
            References(x => x.Model).Cascade.All();
        }
    }
    public class Make
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
    }
    public class Model
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual Make Make { get; set; }
    }
    public class Car
    {
        public virtual int Id { get; set; }
        public virtual string Title { get; set; }
        public virtual Make Make { get; set; }
        public virtual Model Model { get; set; }
    }
}
4

1 回答 1

1

您的 NHibernateHelper.cs 与我的有很大不同。

尝试改变

_sessionFactory = Fluently.Configure()
                                          .Database(MsSqlConfiguration.MsSql2005.ConnectionString(@"Server=10.10.10.7;Database=TestDatabase;uid=sa;pwd=9ijnhy6;Trusted_Connection=false;").ShowSql())
                                          .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Car>())
                                          .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))
                                          .BuildSessionFactory();

至:

_sessionFactory = Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2005.ConnectionString(c => c.FromConnectionStringWithKey("ConnectionString")))
            .Mappings(cfg =>
            {
                cfg.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly());
                cfg.FluentMappings.Conventions.Add(AutoImport.Never());
            })
            .ExposeConfiguration(x =>
            {
                x.SetProperty("current_session_context_class", mode);
            })
            .BuildSessionFactory();

在您的 web.config 或 app.config 中,在标签中添加以下内容:

<connectionStrings>
    <add name="ConnectionString" connectionString="Data Source=10.10.10.7; Initial Catalog=TestDatabase; User Id=sa; Password=9ijnhy6;"/>
</connectionStrings

希望这会有所帮助。

于 2013-01-16T20:31:12.697 回答