2011-12-23 50 views
2

我有一個使用LINQ而不是ORM映射到表的類。它可以處理類中的所有字符串,並將它們顯示在視圖中。不過,如果我添加任何Int32Int16DateTime我得到的錯誤無法將空值分配給類型爲Int32的成員,但字符串可以工作

空值不能被分配到與類型的成員。

用下面的代碼:

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

如果我去掉了註釋行的代碼在控制器出現故障:

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

與:

空值不能分配給Int32類型的成員

數據庫中的大多數列可以是NULL,這是我無法更改的,因爲我不是DBA。爲什麼CanBeNull無效?我該如何解決這個錯誤?我也嘗試使用Nullable<>並使用論壇中概述的一些想法。

+0

你嘗試過可空類型嗎? 'Int32?','DateTime?'等等。或者'可空的' - **編輯** nvm,看起來像您一樣。 – 2011-12-23 15:52:47

+1

使「int」和「DateTime」可爲空應該已經工作。當你嘗試這個時,有什麼問題? – ChrisF 2011-12-23 15:53:22

回答

3

Int32不是能夠表示空值的類型。 System.String可以,因爲它是一個參考類型。要存儲空值類型,如整數,日期,雙打,等等,你需要Nullable<T>,你會寫爲

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

Nullable<T>是具有特殊功能,允許它代表空在那裏正常的值類型的結構體不能。它通過簡單地創建一個包裝來暴露T Valuebool HasValue屬性。當值爲null時,HasValue屬性很簡單,並且直接使用Value時出錯。否則,這是真的,價值是可用的。

1

在數據庫中允許NULL不會自動使您的C#屬性爲空。

string可以爲空 - 因爲這就是它由C#團隊設計的方式。

intDateTime不能爲空 - 它們總是必須有一個值。

如果不行,用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?參考類型。

相關問題