1

私は Visual Studio 2012 を使用しており、System.ArgumentNullException を取得したときに (エンティティ フレームワーク 5 を使用して) SQL クエリを実行したいと考えていました。

スタックトレース:

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:

クエリ:

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

モデル:

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;
    }
}

私は明らかな何かを見逃したと確信していますが、どんな助けもいただければ幸いです。

4

2 に答える 2

2

拡張メソッドcontext.Threads.FirstOrDefault(predicate)は実際には単純なstaticメソッドです: と同じQueryable.FirstOrDefault<Thread>(context.Threads, predicate)です。

あなたの場合、context.Threadisnullであるため、FirstOrDefaultは期待どおりに例外をスローします。

DbSet<>のコンストラクターでプロパティをインスタンス化する必要がありますContext

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

    ...
}
于 2012-12-20T13:13:19.533 に答える
0

これは、ソースが null の場合に発生します。この場合、context.Threads は何らかの理由で null です。MSDNを参照してください。

于 2012-12-20T13:16:31.960 に答える