2

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

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

nvarchar 或 varchar ,除了它是默认设置。

我该如何改变呢?

我知道我可以这样做:

Map(x => x.Name).CustomSqlType("nvarchar").Length(50); // does not work !!!
Map(x => x.Name).CustomSqlType("nvarchar (50)"); // does work !!!

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

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

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

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)));
        }
    }

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

4

2 回答 2

5

您正在使用 SQLite,对吗?这就是你的问题所在。在对另一篇文章的回答中对其进行了更好的描述,但是 SQLite 没有与其他数据库相同的数据类型。这不是 Fluent NHibernate 的问题,而是 NHibernate 处理几乎无数据类型的数据库的方式。

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

于 2011-01-08T23:04:35.593 回答
0

您可以尝试检查您要连接的数据库的兼容性级别。如果它设置得太低(80),它可能默认为文本,因为 NTEXT 直到 SQL2005 才被弃用,这是兼容级别 90。这不是保证,只是一个可能的想法。

这是用于检查兼容性级别的 MSDN 说明...

查看或更改数据库的兼容级别

连接到 SQL Server 数据库引擎的相应实例后,在对象资源管理器中,单击服务器名称以展开服务器树。

展开数据库,并根据数据库选择用户数据库或展开系统数据库并选择系统数据库。

右键单击数据库,然后单击属性。

数据库属性对话框打开。

在选择页面窗格中,单击选项。

当前的兼容级别显示在兼容级别列表框中。

要更改兼容性级别,请从列表中选择不同的选项。选项为 SQL Server 2000 (80)、SQL Server 2005 (90) 或 SQL Server 2008 (100)。

使用 SQLite,只有 5 种数据类型,一种是字符串。

http://www.sqlite.org/c3ref/c_blob.html

SQLite 中的每个值都有以下五种基本数据类型之一:

64 位有符号整数
64 位 IEEE 浮点数
字符串
BLOB
NULL

这些常量是每种类型的代码。

请注意,SQLITE_TEXT 常量也在 SQLite 版本 2 中用于完全不同的含义。链接 SQLite 版本 2 和 SQLite 版本 3 的软件应该使用 SQLITE3_TEXT,而不是 SQLITE_TEXT。

于 2011-01-08T20:01:51.767 回答