2

EntityFramework を使用して SQL DB からデータを読み取る MVP アプリがあります。そのデータは外部の CMS Web サイト データベースからコピーされるため、データが常に信頼できるとは限りません。

私が読んだフィールドの 1 つは SQL の「ビット」データ型で、1 または 0 のいずれかであり、ASP.NET MVC はそれをブール値として要求します。そうしないと、ブール値を int に変換するときにエラーが発生します。

問題は、DB でビット値が NULL になることがあり、MVC アプリがクラッシュすることがあります。ブール値のデータ型は true または false にしかできないというエラーが表示されるため、NULL をチェックできません。

モデル

namespace Foo.Models
{
    [Table("provider")]
    public class Bar
    {
        //can't check for null here, getter and setter only allow boolean
        public Boolean FooBar { get; set; }
    }
}

コントローラ

namespace Foo.Controllers
{
    public ActionResult BarList()
    {
         //Can't check for null here, because if(Boolean == null) will always evaluate to false
         List<Bar> bars = db.Bar.ToList();
         return View(bars);
    }
}

FooBar が NULL の場合、ブール値に NULL を使用できないというエラーがビューにスローされます。この状況をどのように処理しますか?

4

3 に答える 3

2

ブール値にすることができますNULLABLE。これは、bool に値がある場合とない場合があることを意味します。

public Boolean? FooBar { get; set; }

于 2013-02-01T15:41:43.880 に答える
0

> Nullable<T. Null可能

public Boolean? FooBar { get; set; }

Nullable 構造体の 2 つの基本メンバーは、HasValue プロパティと Value プロパティです。Nullable オブジェクトの HasValue プロパティが true の場合、Value プロパティを使用してオブジェクトの値にアクセスできます。HasValue プロパティが false の場合、オブジェクトの値は定義されておらず、Value プロパティにアクセスしようとすると InvalidOperationException がスローされます。

于 2013-02-01T15:43:08.457 に答える
0

ジェネリックを使用できますNullable<bool>( としても表現できますbool?):

Nullable<bool> nullableBool;

次に、次のように使用します。

bool realBool = (nullableBool.HasValue && nullableBool);

// or

if (nullableBool == true) { ... } // true
else { ... } // false or null
于 2013-02-01T15:43:56.493 に答える