Ven*_*emo 5 .net nhibernate orm nhibernate-mapping fluent-nhibernate
好的,昨天我设法获得了NHibernate和FluentNHibernate的最新主干版本,以便与我最新的小项目一起工作.(我正在开发一个bug跟踪应用程序.)我使用Repository模式创建了一个很好的数据访问层.
我认为我的实体并不特别,而且随着ORM目前的成熟,我不想手工制作数据库.因此,我选择使用FluentNHibernate的自动映射功能,将NHibernate的"hbm2ddl.auto"属性设置为"create".
它真的像一个魅力.我将NHibernate配置放在我的app域的配置文件中,进行设置,并开始使用它.(暂时,我只创建了一些单元测试.)它创建了数据库中的所有表,以及我需要的所有表.它甚至正确地映射了我的多对多关系.
但是,有一些小故障:
有没有办法告诉自动映射器上面的两个简单规则?
如果答案为否,如果我修改它创建的表,它会正常工作吗?(所以,如果我设置一些列不允许为null,并为其他一些更改允许的长度,它会正确地与它们一起工作吗?)
最终编辑:非常感谢所有匆匆离去并帮助过的人.我对Fluent的所有问题现在都解决了.
您可以使用自动映射覆盖来更改自动映射器的工作方式,还可以定义约定,这些约定将由自动映射器使用.
以下是有关如何使用约定和覆盖的示例:
var mappings = new AutoPersistenceModel();
mappings.Conventions.Setup(s => s.Add<ColumnNullabilityConvention>());
mappings.UseOverridesFromAssemblyOf<AssemblyName>();
// This convention will set all properties to be not nullable
public class ColumnNullabilityConvention: IPropertyConvention, IPropertyConventionAcceptance
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => x.Nullable, Is.Not.Set);
}
public void Apply(IPropertyInstance instance)
{
instance.Not.Nullable();
}
}
// This override will change "string" to use "text" instead of "varchar(255)".
// Also set the property to be not nullable
public class SomeOverrideInTheSameAssembly : IAutoMappingOverride<TypeName>
{
public void Override(AutoMapping<TypeName> mapping)
{
mapping.Map(x => x.Property).CustomType("StringClob").CustomSqlType("text");
mapping.Map(x => x.Property).Not.Nullable();
}
}
Run Code Online (Sandbox Code Playgroud)
查看这些链接以获取更多示例: