NHibernate以编程方式映射

时间:2014-12-06 16:48:34

标签: c# nhibernate

我想创建一个自定义映射标准,因此我不必为项目中的所有新类创建map.cs文件。

public class Person
{
    public int PersonID { get; set; }
    public string Name { get; set; }
}

通常我会这样:

public class PersonMap : ClassMapping<Person>
{
    public PersonMap()
    {
        Table("Person");

        Id(p => p.PersonID, map => 
        {
            map.Column("PersonID");
            map.Generator(Generators.Identity);
        });

        Property(p => p.Name, map => map.Column("Name"));
    }
}

我想使用反射基于某些标准动态创建这些映射。

public class GenericDAL<T> where T : class, new()
{
    public GenericDAL() 
    {
        Configuration hConfig = new Configuration();
        hConfig.DatabaseIntegration(c =>
        {
            c.ConnectionStringName = "myConnectionStringName";
            c.Dialect<MsSql2012Dialect>();
        });

        ModelMapper mapper = new ModelMapper();
        //Dynamic Mapping here

        ISessionFactory _sessionFactory = hConfig.BuildSessionFactory();
    }
}

我不知道如何从ClassMapping创建新的T,我该怎么做?

2 个答案:

答案 0 :(得分:3)

@SteveLillis已在评论中回答了问题,即已有解决方案。

NHibernate中的MappingByCode(见下文)和FluentNHibernate都支持使用约定和覆盖进行自动化。

从原始答案中复制的“按代码映射”的链接<不再可用

  1. First impressions
  2. Naming convention resembling Fluent
  3. Property
  4. Component
  5. ManyToOne
  6. inheritance
  7. dynamic component
  8. Set and Bag
  9. OneToMany and other collection-based relation types
  10. concurrency
  11. OneToOne
  12. Join
  13. Any
  14. List, Array, IdBag
  15. Map
  16. Id, NaturalId
  17. composite identifiers
  18. entity-level mappings
  19. the summary

答案 1 :(得分:0)

我一直在寻找相同的东西,我在NHibernate official website找到了很好的文档。

Here我们拥有“fabiomaulo.blogspot”网站的所有链接,在那里你会发现你在寻找什么,没有FluentNHibernate。

祝你好运