Как я могу генерировать файлы сопоставления NHibernate и конструкции БД из логики моего домена? - PullRequest
2 голосов
/ 01 мая 2009

Я хочу реализовать NHibernate для своих доменных объектов в моем проекте, но я не уверен, как мне следует создать файл сопоставления и базу данных.

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

Есть ли способ сделать это?

Я прекрасно справляюсь с многоступенчатым процессом, я просто хочу знать, что сделали другие люди, которые были успешными для них.

К вашему сведению, я хочу развернуть базу данных на SQL Server 2005.

Ответы [ 2 ]

2 голосов
/ 01 мая 2009

О картографии: Вы можете создать отображение с помощью Fluent Mapping как Gary. Если у вас очень простая модель домена, вы можете использовать Automapping, основанную на соглашениях функцию отображения FluentNhibernate:

 var sessionFactory = Fluently.Configure()  
   .Database(MsSqlConfiguration.MsSql2005  
     .ConnectionString(c => c  
       .Is(ApplicationConnectionString)))  
   .Mappings(m =>  
     m.AutoMappings.Add(AutoPersistenceModel.MapEntitiesFromAssemblyOf<Product>())  
   )  
   .BuildSessionFactory();

И это все, что вам нужно.

Вы можете создать свою базу данных с помощью schemaexport:

var schemaExport = new SchemaExport(configuration);
schemaExport.Create(false,true);
2 голосов
/ 01 мая 2009

Мне нравится Свободно-NHibernate . Ниже приведен пример отображения класса User, конечно, вы можете использовать XML.

Значение x в выражении lamda представляет класс домена.

Это очень похоже на RoR, который мне очень нравится

public sealed class UserMap : ClassMap<User>, IMapGenerator
    {
        public UserMap()
        { 
            Id(x => x.Id)
                .WithUnsavedValue(0);
            Map(x => x.Username).TheColumnNameIs("UserName");
            Map(x => x.Password).TheColumnNameIs("Password");   
            Map(x => x.Salt).ReadOnly();

            Map(x => x.CreatedOn).ReadOnly();
            Map(x => x.CreatedBy).ReadOnly();
            Map(x => x.CreatedAt).ReadOnly();

            Map(x => x.ApprovalStatus)
                .TheColumnNameIs("ApprovalStatusId")
                .CustomTypeIs(typeof(ApprovalStatus));

            Map(x => x.DeletionStatus)
                .TheColumnNameIs("DeletionStatusId")
                .CustomTypeIs(typeof(DeletionStatus));

            References(x => x.Role).Not.Nullable();
            References(x => x.Contact);

        }

        #region IMapGenerator Members

        public System.Xml.XmlDocument Generate()
        {
            return CreateMapping(new MappingVisitor());
        }

        #endregion
    }
...