我正在尝试Fluent Nhibernate的自动化功能..
我看到an example有一个默认的字符串约定as follows:
namespace Vuscode.Framework.NHibernate.Conventions
{
using FluentNHibernate.Conventions;
using FluentNHibernate.Conventions.Instances;
public class DefaultStringPropertyConvention : IPropertyConvention
{
public void Apply(IPropertyInstance instance)
{
instance.Length(100);
instance.Nullable();
}
}
}
在这里,我看不到任何检查instance
是否为字符串类型的东西..它只是使长度为100并且可以为空.Automapper如何知道将此约定仅应用于字符串?
此外,我想让我的所有bool都不可为空,并设置默认值为0 ..所以按照上面的例子,我有这个:
namespace Vuscode.Framework.NHibernate.Conventions
{
using FluentNHibernate.Conventions;
using FluentNHibernate.Conventions.Instances;
public class DefaultBoolPropertyConvention : IPropertyConvention
{
public void Apply(IPropertyInstance instance)
{
instance.Not.Nullable();
instance.Default("0");
}
}
}
但是如果我这样做并且在我的项目中也有默认的字符串约定..那么automapper如何知道应用约定的属性类型在哪里?
我尝试阅读fluent wiki on conventions,但没有找到任何有用的东西..
答案 0 :(得分:1)
stringconvention应用于所有属性,但由于NHibernate忽略非字符串属性的长度,而nullable是默认值,它只是没有效果。您有两种方法可以过滤非bool属性
public void Apply(IPropertyInstance instance)
{
if (instance.Type == typeof(bool))
{
instance.Not.Nullable();
instance.Default("0");
}
}
// or
public class DefaultBoolPropertyConvention : IPropertyConvention, IPropertyConventionAcceptance
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(i => i.Type == typeof(bool));
}
public void Apply(IPropertyInstance instance)
{
instance.Not.Nullable();
instance.Default("0");
}
}