FluentNhibernate, добавить сопоставления из нескольких сборок - PullRequest
4 голосов
/ 19 мая 2011

Я пытался добавить классы отображения вручную, используя несколько вызовов расширения .Mappings, но, похоже, он включает только последний.Итак, как мне добавить несколько выбранных карт классов или несколько сборок?

Моя беглая конфигурация обычно выглядит так:

 Return Fluently.Configure() _
                .Database(SQLiteConfiguration.Standard.ConnectionString(connectionString) _
                .Cache(Function(c) c.UseQueryCache())) _
            .Mappings(Function(m) m.FluentMappings.AddFromAssemblyOf(Of AccountMap)() _
                .Conventions.Add(FluentNHibernate.Conventions.Helpers.DefaultLazy.Never())) _
            .ExposeConfiguration(Function(c) InlineAssignHelper(cfg, c)) _
            .BuildSessionFactory()

Ответы [ 2 ]

7 голосов
/ 19 мая 2011

Просто укажите все свои сборки.

m.FluentMappings
    .AddFromAssemblyOf(Of AccountMap)()
    .AddFromAssemblyOf(Of SomeOtherMap)();
2 голосов
/ 11 февраля 2014

Похоже, что многие люди, включая меня, не находят полного решения, чтобы добавить все сборки, сброшенные в папку bin, если они анонимны.Во всяком случае, я сделал это так, это не оптимально, но это решение ..

Подробнее о NoEntity здесь.

    private static Conf CreateConfig()
    {
        return Fluently.Configure()
            .Database(DatabaseConfig)
            .Mappings(AddAssemblies)                
            .ExposeConfiguration(ValidateSchema)
            .ExposeConfiguration(BuildSchema)
            .BuildConfiguration();
    }

    private static void AddAssemblies(MappingConfiguration fmc)
    {
         (from a in AppDomain.CurrentDomain.GetAssemblies()
                select a
                    into assemblies
                    select assemblies)
                    .ToList()
                    .ForEach(a => 
                     {
                        //Maybe you need to inly include your NameSpace here.
                        //if(a.FullName.StartsWith("MyAssembly.Name")){
                        fmc.AutoMappings.Add(AutoMap.Assembly(a)
                            .OverrideAll(p => 
                            {
                                p.SkipProperty(typeof(NoEntity));
                            })
                            .Where(IsEntity));
                     }
          );
    }

    private static bool IsEntity(Type t)
    {
        return typeof(IEntity).IsAssignableFrom(t);
    }

    //Map IEntity
    public class User : IEntity{}
    public class UserMap : Entity<User>{}
    //UserMap inherits ClassMap<T>
...