为什么Fluent NHibernate会将C#String属性中的Text字段始终创建为DEFAULT?

Eli*_*eth 2 convention sqlite string text fluent-nhibernate

我在这里运行这个示例:https://github.com/jagregory/fluent-nhibernate/blob/master/src/Examples.FirstProject/Program.cs

String类型的所有C#属性都映射到TEXT sql字段而不是

nvarchar OR varchar,除了它作为DEFAULT设置.

我怎么能改变呢?

我知道我可以这样做:

Map(x => x.Name).CustomSqlType("nvarchar").Length(50); // does not work !!!
Map(x => x.Name).CustomSqlType("nvarchar (50)"); // does work !!!
Run Code Online (Sandbox Code Playgroud)

但我不想改变每个领域......

更新:...因此我可以通过=>进行自定义约定

我要做的是编写一个自定义的公约类,如:

public class ColumnStringToNVarCharConvention : IPropertyConvention, IPropertyConventionAcceptance
    {
        public void Apply(IPropertyInstance instance)
        {
            instance.CustomSqlType("nvarchar");
        }

        public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
        {
            criteria.Expect(x => x.Property.GetType().Equals(typeof(string)));
        }
    }
Run Code Online (Sandbox Code Playgroud)

有人可以正确上述代码吗?我测试了它,它没有用,为什么...

Jam*_*ory 5

你正在使用SQLite,对吗?这就是你的问题所在.在另一篇文章的答案中,它的描述更好,但SQLite没有与其他数据库相同的数据类型.它不是一个流畅的NHibernate问题,它是NHibernate处理几乎无数据类型的数据库的方式.

对于更严格的数据库,Fluent NHibernate默认使用更合理的数据类型.它因数据库而异,但它是一个nvarchar字符串.