2012-12-20 71 views
1
檢索數據庫值時

我使用Visual Studio 2012和想要做一個SQL查詢(使用實體框架5)當我System.ArgumentNullException爲:獲得異常使用LINQ

堆棧跟蹤:

System.ArgumentNullException was unhandled 
    HResult=-2147467261 
    Message=Value cannot be null. 
Parameter name: source 
    Source=System.Core 
    ParamName=source 
    StackTrace: 
    at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source, Expression`1 predicate) 
    at Model.RavenDB.ThreadProvider_Raven.Get(Eid item, Rid forum) in c:\Users\fm\Desktop\121219scraper-mssql\Model.RavenDB\ThreadProvider_Raven.cs:line 52 
    at Model.RavenDB.ThreadProvider_Raven.Exsist(Eid item, Rid forum, Nullable`1& out_Item) in c:\Users\fm\Desktop\121219scraper-mssql\Model.RavenDB\ThreadProvider_Raven.cs:line 90 
    at Scraper.DT_Category.Download() in c:\Users\fm\Desktop\121219scraper-mssql\Scraper\1 (independent)\Download tasks\DT_Category.cs:line 115 
    at Scraper.DQ_ParticularForum.QueueReader(Object _this) in c:\Users\fm\Desktop\121219scraper-mssql\Scraper\1 (independent)\DQ_ParticularForum.cs:line 72 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart(Object obj) 
    InnerException: 

QUERY:

using (var context = new Model.MsSql.Context()) 
{ 
    var t = context.Threads.FirstOrDefault(s => s.ForumId == (short)forum && s.ExternalId == (int)item); 
    ... 
} 

MODEL:

namespace Model.MsSql 
{ 
    public class Context : DbContext 
    { 
     public DbSet<Message> Messages; 
     public DbSet<Thread> Threads; 
    } 

    public class Message 
    { 
     public int ExternalId; 
     public short ForumId; 
    } 

    public class Thread 
    { 
     public int ExternalId; 
     public short ForumId; 
    } 
} 

我確定我錯過了一些明顯的東西,但任何幫助將不勝感激。

+0

也許你應該向我們展示你想要查詢數據庫的代碼。 –

+0

是的,那肯定會讓任何人都更容易幫忙......對不起。 – Niko

回答

2

擴展方法context.Threads.FirstOrDefault(predicate)實際上是一個簡單的static方法:它與Queryable.FirstOrDefault<Thread>(context.Threads, predicate)相同。

在你的情況下,context.Threadnull,所以FirstOrDefault引發異常如預期。

你應該在你Context的構造函數實例化您的DbSet<>屬性:

public class Context : DbContext 
{ 
    public Context() 
    { 
     this.Messages = ... 
     this.Threads = ... 
    } 

    ... 
} 
+0

謝謝你的時間。我知道查詢應該找不到任何東西,表格是空的。但是context.Thread = null意味着表本身不存在嗎? – Niko

0

這happends如果source爲null,你的情況context.Threads由於某種原因空,看MSDN

+0

謝謝你的時間。這是我第一次使用MS SQL - 我認爲它包含在Visual Studio中,但是我必須手動安裝它嗎? – Niko