2015-05-20 38 views
-1

我有一個數據庫,包含2個字段以收集出生日期和年齡。由於我們並不總是具有這些數據,所以這些字段是可空的。插入新記錄時,我使用實體框架和下面顯示的代碼。如何使用實體框架從表單中將空值存儲在我的數據庫中

la.DOB = DateTime.Parse(txtDOB.Text); 
la.Age = Int32.Parse(txtAge.Text); 

該過程將工作,除非這兩個字段中沒有任何數據。由於字符串中存在空值,解析失敗。我如何將null值傳遞給intity框架。我曾嘗試使用TryParse,但似乎無法獲得正確的語法。

我通過將代碼更改爲 DateTime DOB解決了該問題; if(DateTime.TryParse(txtDOB.Text,out DOB)) la.DOB = DOB;其他 la.DOB =(DateTime?)null;

+0

Intity Framework?必須是新的... – MikeTheLiar

+0

什麼是'intity框架',你拼錯'實體框架'還是你在談論其他一些圖書館? –

+0

對不起Scott我正在使用實體框架。我已經解決了這個問題。 – Perry

回答

0

您應該使用DateTime.TryParseint.TryParse因爲你已經說

DateTime dob; 
int age; 

if (DateTime.TryParse(txtDOB.Text, out dob) 
{ 
    la.DOB = dob 
} 

if (int.TryParse(txtAge.Text, out age) 
{ 
    la.Age = age 
} 
0

獲取DOB和年齡您創建一個查詢執行之前,因此EF不會嘗試將.NET方法進入SQL代碼:

DateTime? dob = null; 
if (txtDOB.Text == "") 
    dob = DateTime.Parse(txtDOB.Text); 

int? age = null; 
if (txtAge.Text == "") 
    age = Int32.Parse(txtAge.Text); 

然後在查詢中使用這些值:

la.DOB = dob; 
la.Age = age; 

以上代碼假定用戶輸入的任何數據都是有效的。你可以做額外的驗證,或者你可以使用一些限制用戶輸入的控件,比如DateTime選擇器或者NumericUpDown控件(取決於你設計你的應用的平臺)。

0

這並不直接解決你的問題,但是...

年齡屬性將很快會過時的,如果你不經常更新記錄。如果你五年內沒有觸及記錄,DOB仍然是正確的,但年齡將是5年。

除非你的數據庫堅持同時擁有這兩個值,並且你不控制它的模式,否則你最好只在數據庫中存儲DOB。年齡可以很容易地在您的實體對象中計算。

+0

偉大的建議傢伙我會與客戶討論這些想法不確定他們是否想要更新年齡或想在輸入數據時知道該人的年齡 – Perry

0

問題的解決方案是使用帶有else語句的TryParse傳遞null值(如果表單字段留空)。如果有其他人遇到這個問題,這裏是代碼 DateTime DOB; if(DateTime.TryParse(txtDOB.Text,out DOB)) la.DOB = DOB;其他 la.DOB =(DateTime?)null;

相關問題