2

ここでこのサンプルを実行します: https://github.com/jagregory/fluent-nhibernate/blob/master/src/Examples.FirstProject/Program.cs

文字列型のすべての 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 !!!

しかし、私はすべてのフィールドを変更したくありません...

更新:...したがって、=>を介してカスタムコンベンションを行うことができます

私がしなければならないことは、次のようなカスタム 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 は互換性レベル 90 である SQL2005 まで廃止されていなかったため、デフォルトでテキストになっている可能性があります。

これは、互換性レベルを確認するための MSDN の手順です...

データベースの互換性レベルを表示または変更するには

SQL Server データベース エンジンの適切なインスタンスに接続した後、オブジェクト エクスプローラーでサーバー名をクリックしてサーバー ツリーを展開します。

[データベース] を展開し、データベースに応じて、ユーザー データベースを選択するか、[システム データベース] を展開してシステム データベースを選択します。

データベースを右クリックし、[プロパティ] をクリックします。

[データベースのプロパティ] ダイアログ ボックスが開きます。

[ページの選択] ウィンドウで、[オプション] をクリックします。

現在の互換性レベルが [互換性レベル] リスト ボックスに表示されます。

互換性レベルを変更するには、リストから別のオプションを選択します。選択肢は、SQL Server 2000 (80)、SQL Server 2005 (90)、または SQL Server 2008 (100) です。

SQLite では、データ型は 5 つしかなく、そのうちの 1 つは文字列です。

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

SQLite のすべての値には、次の 5 つの基本的なデータ型のいずれかがあります。

64 ビット符号付き整数
64 ビット IEEE 浮動小数点数
文字列
BLOB
NULL

これらの定数は、これらの各タイプのコードです。

SQLITE_TEXT 定数は、SQLite バージョン 2 でもまったく異なる意味で使用されていたことに注意してください。SQLite バージョン 2 と SQLite バージョン 3 の両方にリンクするソフトウェアは、SQLITE_TEXT ではなく、SQLITE3_TEXT を使用する必要があります。

于 2011-01-08T20:01:51.767 に答える