0

我是 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();
                }
            }
        }

当我点击按钮时,我得到了

在此处输入图像描述

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

4

1 回答 1

1

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

于 2013-08-02T13:25:57.700 回答