2011-12-23 4 views
2

LINQではなくORMを使用してテーブルにマップするクラスがあります。これは、クラス内のすべての文字列で機能し、ビューに表示します。私はどんなInt32Int16またはDateTimeを追加した場合しかし、私はエラーnull型の値をInt32型のメンバーに割り当てることはできませんが、文字列が使用できます

null値が型を持つメンバーに割り当てることはできませんを取得します。以下のコードで

:で

 return View(BooRepository.Registrations.ToList()); 

ヌルを

[Table(Name = "RegisterBoo")] 
public class RegistrationBoo 
{ 
    [Column] public string BooNum { get; set; } 
    //[Column(CanBeNull = true)] public Int32 ServiceStatusId { get; set; } 

私はでコードがコントローラに障害が発生したコメントアウト行のコメントを解除した場合値がInt32のメンバーに割り当てられません

データベースのほとんどの列はNULLにすることができますが、これはDBAではないため変更できません。 CanBeNullはなぜ機能しないのですか?このエラーを解決するにはどうすればよいですか?私はまた、Nullable<>を使用し、フォーラムで概説されているアイディアのいくつかを使って試しました。

+0

null可能な型を試しましたか? 'Int32?'、 'DateTime?'など、 'Nullable ' - ** EDIT ** nvmのように見えます。 –

+1

'int'と' DateTime'sをヌル可能にすることは効果があったはずです。あなたがそれを試みたときの問題は何でしたか? – ChrisF

答えて

3

Int32は、nullを表現できる型ではありません。 System.String缶は参考タイプですので、など、整数、日付、ダブルス、などの値型のためにNULLを格納するには、

Nullable<int> // long version 
int? // shorthand for above, showing shorthands below 
DateTime? 
double? 
decimal? 
// and so on for structs... 

Nullable<T>はどこ正常値の型がnullを表現することを可能にする特別な機能を持つ構造体であるとして、あなたが書いたと思われる、Nullable<T>を必要としますできません。これは、単にT Valuebool HasValueのプロパティを公開するラッパーを作成するだけです。値がnullの場合、HasValueプロパティは単にfalseであり、Valueを直接使用するとエラーになります。それ以外の場合は真であり、値は使用可能です。

1

データベースにNULLを許可しても、自動的にC#プロパティがNULLに設定されることはありません。

stringこれはC#チームによって設計された方法なので、nullにすることができます。

intおよびDateTimeはnullにできません。これらの値は常に値を持つ必要があります。

問題が解決しない場合は、代わりにint?(またはNullable<int>)を使用します。

[Table(Name = "RegisterBoo")] 
public class RegistrationBoo 
{ 
    [Column] public string BooNum { get; set; } 
    [Column(CanBeNull = true)] public Int32? ServiceStatusId { get; set; } 
0

変更この行:これまで

[Column(CanBeNull = true)] public Int32 ServiceStatusId { get; set; } 

[Column(CanBeNull = true)] public Int32? ServiceStatusId { get; set; } 

そして、あなた」 .HasValue.Valueのプロパティで作業する必要があります参照種別はInt32?です。