在Fluent NHibernate中获取“No persister for”错误

时间:2013-08-02 11:55:18

标签: asp.net nhibernate fluent-nhibernate nhibernate-mapping

我是Fluent NHibernet的新手,我在我的asp.net应用程序中使用Fluent NHibernet

这是我的Poco课程

public virtual int CategoryId { get; set; }

public virtual string CategoryName { get; set; }

public virtual bool IsActive { get; set; }

public virtual bool IsDeleted { get; set; }

我的映射类

 public class clsCategoryMap : ClassMap<clsCategory>
    {
        public clsCategoryMap()
        {
            Id(x => x.CategoryId).Column("CategoryId").GeneratedBy.Assigned().Not.Nullable();
            Map(x => x.CategoryName).Column("CategoryName").Not.Nullable();
            Map(x => x.IsActive).Column("IsActive").Not.Nullable();
            Map(x => x.IsDeleted).Column("IsDeleted").Not.Nullable();
            Table("tblCategory");
        }
    }

Poco类和Mapping类在Liberar类中都被破坏了:DAL用于Poco类和BLL用于Mapping类。

我在下面创建了帮助类:

public class FNHelper
    {
        private static ISessionFactory _sessionfactory;

        private static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionfactory == null) { InitializationSessionFactory(); }

                return _sessionfactory;
            }
        }

        private static void InitializationSessionFactory()
        {
            _sessionfactory = Fluently.Configure()
           .Database(
               MsSqlConfiguration.MsSql2008
               .ConnectionString(@"Server=test\SQLEXPRESS;Database=TestDB;User ID=sa;Password=root;")
               .DefaultSchema("dbo")
               .ShowSql()
            )
           .Mappings(m => m.FluentMappings.AddFromAssemblyOf<clsCategory>())
           .ExposeConfiguration((cfg => new SchemaUpdate(cfg).Execute(true, true)))
           .BuildSessionFactory();
        }

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

        private static void BuildSchema(NHibernate.Cfg.Configuration configuration)
        {
            String SqliteRefFileName = @"D:\Projects\MeshpsDB.sql";
            if (File.Exists(SqliteRefFileName))
                File.Delete(SqliteRefFileName);

            new SchemaExport(configuration)
              .Create(true, true);
        }
    }

最后我的表格如下:

protected void btnSave_Click(object sender, EventArgs e)
        {
            using (var session = FNHelper.OpenSession())
            {
                using (var tranction = session.Transaction)
                {
                    var objCategory = new clsCategory
                    {
                        CategoryId = 0,
                        CategoryName = txtName.Text.Trim(),
                        IsActive = true,
                        IsDeleted = false
                    };
                    session.Save(objCategory);
                    tranction.Commit();
                }
            }
        }

当我点击按钮然后我正在

enter image description here

所以每个人都请告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

m.FluentMappings.AddFromAssemblyOf<clsCategory>()更改为m.FluentMappings.AddFromAssemblyOf<clsCategoryMap>(),因为它要添加的映射位于另一个程序集中。