17

「アクティブ」と呼ばれるビットフィールドを含むSQLテーブルに関連付けられているEFエンティティがあります。T4テンプレートから編集コードを生成し、ページはEFエンティティから継承します。ページの下部に、次のようなCheckBoxForが生成されました。

<%= Html.CheckBoxFor(model => model.Active) %>

model.Activeの下で素晴らしい赤い波線が表示され、エラーメッセージは、型boolを暗黙的に変換できないことを示していますか?ブール値に。だから、私は次のことを試しました:

<%= Html.CheckBoxFor(model => (bool)model.Active) %>

もちろん、それは気に入らず、私にこのエラーを与えました:

System.InvalidOperationException:テンプレートは、フィールドアクセス、プロパティアクセス、単一次元配列インデックス、または単一パラメーターのカスタムインデクサー式でのみ使用できます。

私はおそらく単純なものが欠けています。

4

1 に答える 1

41

試すmodel.Active.Value

このフィールドをnull許容にしない場合は、データベース側のデータ型をに変更する必要がありますnot null

編集

なぜこれが起こるのですか?

データベースフィールドはとして定義されFIELDNAME BIT NULLます。これは、NULL、true、falseの3つの値を含めることができることを意味します。3つの値を含めることができるため、bool?にマップされます。エンティティフレームワークを入力します。ブール?はの別の名前でありNullable<bool>、boolのラッパーであり、3番目の値:NULLを持つことができます。CheckBoxForは、trueまたはfalseの2つの値のいずれかを予期するため、を除外することはできませんNullable<bool>。すべてのNullableには、ラップされた型を返すvalueというプロパティがあります。Nullable<bool>.Valueただし、データベースフィールドにnullが含まれると、エラーがスローされることに注意してください。このフィールドにNULL値が含まれていてはならないことが確実な場合は、データ型をに変更してFIELDNAME BIT NOT NULL、データベースからモデルを再度生成する必要があります。これにより、データ型がブール値から変更されますか?ブール値を設定すると、Valueプロパティを呼び出す必要がなくなります。

于 2010-02-15T19:19:57.703 に答える