2015-03-08 85 views
0

這是否正確理解此代碼的作用 - 是否更新具有URLPathurl的行的正確方法,以便IsInProcessing列是true實體框架 - 解釋我的代碼

我還沒有嘗試過這段代碼。在我做之前,我想嘗試並理解它!它由各種來源拼湊而成。

代碼:

using(var db = new DamoclesEntities()) 
{ 
    var urls = db.URLS; 
    var result = urls.FirstOrDefault(u => u.URLPath == url); 
    result.IsInProcessingQueue = true; 
    db.SaveChanges(); 
} 
  1. 我覺得這裏發生的事情中的使用,我實例化DamoclesEntities()類作爲var db
  2. 然後我實例化db.URLS(類/表)到var urls
  3. 然後我找到URLPath(列)包含url的第一行,並將該行分配給result
  4. 我將該行的IsInProcessingQueue(列值)更改爲true;
  5. 最後,我保存對數據庫的更改。
+1

代碼應工作,你的理解是正確,但是它可以做更多的優雅和使用std命名約定。 – sed 2015-03-08 18:25:18

+1

你的理解大多是正確的。 'using'確保數據庫正確關閉,並且將*'db.URLS'賦給新變量不會實例化它。除此之外,你會發生什麼。我仍然會建議你閱讀一本書或其他東西。 – poke 2015-03-08 18:25:18

+1

如果找不到URL,它也可能會崩潰:在這種情況下,您會得到result = null和空指針異常。這有可能發生嗎?您可以將FirstOrDefault更改爲First,但如果它不存在,則會引發不同的異常。在這種情況下你想要什麼樣的行爲? – Rup 2015-03-08 18:29:10

回答

1

這幾乎是正確的,但請記住,FirstOrDefault將返回空值,以防沒有按指定條件找到的行 - URLPath == url

所以在這種情況下,下一行將產生NullReferenceException。

只需添加的result檢查空和做result.IsInProcessingQueue = true;db.SaveChanges();只有result != null

+0

「這幾乎是正確的」 - 你能詳細說明一下嗎?什麼是不正確的?只是NPE? – Rup 2015-03-08 18:30:52

+0

什麼是不正確的 - 「使用」不僅僅是「實例化」,它是一種建造的快捷方式,它調用'db'實例的Dispose()方法。當然不是空檢查。 – 2015-03-09 00:13:27

+0

你可以閱讀'使用'[這裏](https://msdn.microsoft.com/en-us/library/yh598w02.aspx)。仔細閱讀評論。 – 2015-03-09 00:20:07