我想在我的项目中的域对象上实现NHibernate,但我不确定如何生成映射文件和数据库。
我发现了一些与here和here有关的问题,但我从已经定义的类开始,并希望从它们开始并向下工作而不是相反。
有没有办法做到这一点?
我对多阶段流程完全没问题,我只是想知道其他人为他们所取得的成就。
仅供参考,我想在SQL Server 2005上部署数据库。
答案 0 :(得分:2)
我喜欢Fluent-NHibernate。请参阅下面的示例以映射User类,当然您可以使用XML。
lamda表达式中的x值表示域类。
这非常像我非常喜欢的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
}
答案 1 :(得分:2)
关于映射: 您可以使用像Gary这样的Fluent Mapping创建映射。 当您拥有一个非常简单的域模型时,您可以使用自动映射,这是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);