流畅的映射 - 不同程序集中的实体和类映射

UpT*_*eek 3 nhibernate fluent-nhibernate

使用流畅配置指定流畅的映射时,如下所示:

.Mappings(m => m.FluentMappings.AddFromAssembly(typeof(UserMapping).Assembly))
Run Code Online (Sandbox Code Playgroud)

目前我得到一个"NHibernate.MappingException:No persister for"错误.

我的实体和我的ClassMaps在不同的程序集中是一个问题吗?大概AddFromAssembly对包含类映射的程序集感兴趣,而不是实体?(这就是我所假设的)

谢谢!

更新:

很抱歉没有快速回复答案 - 设置赏金后我不得不出差.

无论如何,谢谢你的回应.我已经浏览了它们并更新了我的代码以使用AddFromAssemblyOf而不是AddFromAssembly,但仍然得到相同的错误.可能我做的事情很愚蠢.这是我正在使用的会话工厂代码的完整代码:

public class NHibernateHelper
    {
        private static ISessionFactory _sessionFactory;
        private static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionFactory == null)
                {
                    var mysqlConfig = FluentNHibernate.Cfg.Db.MySQLConfiguration
                        .Standard
                        .ConnectionString("CONNECTION STRING OMITTED")
                        .UseOuterJoin()
                        .ProxyFactoryFactory("NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle");

                    _sessionFactory = FluentNHibernate.Cfg.Fluently.Configure()
                                        .Database(mysqlConfig)
                                        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<User>())
                                        .BuildSessionFactory();


                }

                return _sessionFactory;
            }
        }

        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }
    }
Run Code Online (Sandbox Code Playgroud)

尝试在nunit中运行使用此会话机制使用存储库的测试时,我收到此异常:

NHibernate.MappingException:没有持久性:xxxx.Model.Entities.User

谢谢

PS:我尝试过使用和AddFromAssemblyOf(); 具有映射定义的项目(DataAccess)引用了具有实体的项目(Model).

Ant*_*lin 5

您使用的是什么版本的Fluent NHibernate?发布候选版本和1.0发行版本存在问题.您可能需要考虑从SVN存储库下载最新版本.

http://fluent-nhibernate.googlecode.com/svn/trunk/

此外,您可能需要检查连接字符串以确保它完全正确,并且您希望确保下面的"用户"指向一个类.

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<User>())
Run Code Online (Sandbox Code Playgroud)

另外,我应该提一下,当你使用AddFromAssemblyOf时,fluent将尝试映射该程序集中的每个类.如果您在该命名空间中有任何其他类,则需要对其进行过滤.有几种不同的方法可以实现这一目标.最简单的方法是将您想要映射的所有POCO放在它们自己的命名空间中,然后执行以下操作.

.Mappings(m => m.AutoMappings
                .Add(AutoMap.AssemblyOf<MyNamespace.Entities.MyClass>()
                .Where(type => type.Namespace == "MyNamespace.Entities")
Run Code Online (Sandbox Code Playgroud)

Where子句将过滤您不想映射的项目.