title: EF-Code First: Unable to create a constant value of type ''. Only primitive types ('such as Int32, String, and Guid') are supported in this context
body: <p>I am currently having trouble with some some linq using EF code first. My current code works fine: </p>
  
  <p>My database model</p>
  
  <pre><code>public class MyDatabase : DbContext
  {
       public DbSet&lt;Person&gt; People { get; set; }
       public DbSet&lt;Role&gt; Roles { get; set; }
       public DbSet&lt;Visit&gt; Visits { get; set; }
  }
  
  public class Person
  {
       public int PersonId { get; set; }
       public string Forename { get; set; }
       public string Surname { get; set; }   
  }
  
  public class Visit
  {
       public int VisitId { get; set; }
       public string Name {get; set;}
       public int PersonId { get; set; }
       public string VisitStatus { get; set; }
       public virtual Person People { get; set; }  
       //There is a one to many relationship to person
  }
  
  public class Role
  {
      public Role()
      {
         People = new HashSet&lt;Person&gt;();
      }
  
      [Key]
      public int RoleId { get; set; }
      public string Name { get; set; }
  
      public virtual ICollection&lt;Person&gt; People { get; set; }
       //There is a many to many relationship to person
  }
  </code></pre>
  
  <p>My query</p>
  
  <pre><code>public IEnumerable&lt;VisitDetails&gt; GetGuestVisiterList()
  {
      using (var db = new MyDatabase())
      {
          return (from p in db.People
          where p.Roles.Any(a =&gt; a.Name == "Guest")
          select new GuestVisitDetails
              {
                  PersonId = p.PersonId,
                  Forename = p.Forename,
                  Surname = p.Surname,
                  NumberOfVisits = db.Visits.Count(v =&gt; v.PersonId == p.PersonId &amp;&amp; v.VisitStatus != "Complete")
              }).ToList();
  
      }    
  }
  </code></pre>
  
  <p>My View model</p>
  
  <pre><code>public class GuestVisitDetails
  {
      public int PersonId { get; set; }
      public string Forename { get; set; }
      public string Surname { get; set; }
      public int NumberOfVisits { get; set; }
  }
  </code></pre>
  
  <p>But when I try to use an interface for my database model so I can unit test, it get the following error:</p>
  
  <pre><code>Unable to create a constant value of type 'MyVisits.Data.Model.Visit'. Only primitive types ('such as Int32, String, and Guid') are supported in this context
  </code></pre>
  
  <p>My Datebase interface</p>
  
  <pre><code>public class MyDatabase : DbContext, IDolphinDatabase
  {
       public IDbSet&lt;Person&gt; People { get; set; }
       public IDbSet&lt;Role&gt; Roles { get; set; }
       public IDbSet&lt;Visit&gt; Visits { get; set; }
  }
  
  public interface IMyDatabase : IDisposable
  {
       public IDbSet&lt;Person&gt; People { get; set; }
       public IDbSet&lt;Role&gt; Roles { get; set; }
       public IDbSet&lt;Visit&gt; Visits { get; set; }
  }
  </code></pre>
  
  <p>My new Query, I created a dbFactory to just get the IMyDatabase</p>
  
  <pre><code>public IEnumerable&lt;VisitDetails&gt; GetGuestVisiterList(int paperId)
  {
      using (var db = _dbFactory.GetDatabase())
      {
          return (from p in db.People
                  where p.Roles.Any(a =&gt; a.Name == "Guest")
                  select new GuestVisitDetails
                   {
                       PersonId = p.PersonId,
                       Forename = p.Forename,
                       Surname = p.Surname,
                       NumberOfVisits = db.Visits.Count(v =&gt; v.PersonId == p.PersonId &amp;&amp; v.VisitStatus != "Complete")
                   }).ToList();
      }    
  }
  </code></pre>
  
  <p>I've found out that it is the 'NumberOfVisits' that is causing the problem but am unsure why or how to fix it.</p>
  
  <p>As requested the stack trace</p>
  
  <pre><code>[NotSupportedException: Unable to create a constant value of type 'MyVisits.Data.Model.Visit'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.]
  System.Data.Objects.ELinq.ConstantTranslator.TypedTranslate(ExpressionConverter parent, ConstantExpression linq) +902
  System.Data.Objects.ELinq.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) +54
  System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) +110
  System.Data.Objects.ELinq.&lt;&gt;c__DisplayClass77.&lt;TypedTranslate&gt;b__75(Expression e) +11
  System.Linq.WhereSelectEnumerableIterator`2.MoveNext() +151
  System.Data.Common.CommandTrees.ExpressionBuilder.Internal.EnumerableValidator`3.Validate(IEnumerable`1 argument, String argumentName, Int32 expectedElementCount, Boolean allowEmpty, Func`3 map, Func`2 collect, Func`3 deriveName) +237
  System.Data.Common.CommandTrees.ExpressionBuilder.Internal.EnumerableValidator`3.Validate() +46
  System.Data.Common.CommandTrees.ExpressionBuilder.Internal.ArgumentValidation.CreateExpressionList(IEnumerable`1 arguments, String argumentName, Boolean allowEmpty, Action`2 validationCallback) +142
  System.Data.Common.CommandTrees.ExpressionBuilder.Internal.ArgumentValidation.ValidateNewCollection(IEnumerable`1 elements, DbExpressionList&amp; validElements) +72
  System.Data.Objects.ELinq.NewArrayInitTranslator.TypedTranslate(ExpressionConverter parent, NewArrayExpression linq) +121
  System.Data.Objects.ELinq.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) +54
  System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) +110
  System.Data.Objects.ELinq.ConstantTranslator.TypedTranslate(ExpressionConverter parent, ConstantExpression linq) +520
  System.Data.Objects.ELinq.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) +54
  System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) +110
  System.Data.Objects.ELinq.AggregateTranslator.Translate(ExpressionConverter parent, MethodCallExpression call) +86
  System.Data.Objects.ELinq.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod) +14
  System.Data.Objects.ELinq.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq) +102
  System.Data.Objects.ELinq.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) +54
  System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) +110
  System.Data.Objects.ELinq.MemberInitTranslator.TypedTranslate(ExpressionConverter parent, MemberInitExpression linq) +310
  System.Data.Objects.ELinq.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) +54
  System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) +110
  System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input) +80
  System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input, DbExpressionBinding&amp; binding) +88
  System.Data.Objects.ELinq.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression&amp; source, DbExpressionBinding&amp; sourceBinding, DbExpression&amp; lambda) +85
  System.Data.Objects.ELinq.SelectTranslator.Translate(ExpressionConverter parent, MethodCallExpression call) +37
  System.Data.Objects.ELinq.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod) +14
  System.Data.Objects.ELinq.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq) +102
  System.Data.Objects.ELinq.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) +54
  System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) +110
  System.Data.Objects.ELinq.ExpressionConverter.Convert() +16
  System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption) +110
  System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +149
  System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable&lt;T&gt;.GetEnumerator() +44
  System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator() +40
  System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable&lt;TResult&gt;.GetEnumerator() +40
  System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +315
  System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
  MyVisits.Business.&lt;GetGuestVisiterList&gt;c__Binding.Invoke(Object&amp; instance, Arguments arguments, Object aspectArgs) in E:\Visual Studio\Projects\MyVisits_current\MyVisits.Business\VisitService.cs:459
  PostSharp.Aspects.Internals.MethodInterceptionArgsImpl`1.Proceed() +23
  MvcMiniProfiler.Aop.MiniProfilerAttribute.OnInvoke(MethodInterceptionArgs args) in E:\Visual Studio\Projects\MyVisits_current\MvcMiniProfiler.Aop\MiniProfilerAttribute.cs:17
  MyVisits.Business.VisitService.GetGuestVisiterList() in :0
  MyVisits.Web.Areas.RegionalAdministrator.Controllers.VisitController.EditVisitor() in E:\Visual Studio\Projects\MyVisits_current\MyVisits.Web\Areas\RegionalAdministrator\Controllers\VisitController.cs:85
  lambda_method(Closure , ControllerBase , Object[] ) +101
  System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
  System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +208
  Castle.Proxies.ControllerActionInvokerProxy.InvokeActionMethod_callback(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
  Castle.Proxies.Invocations.ControllerActionInvoker_InvokeActionMethod.InvokeMethodOnTarget() +154
  Castle.DynamicProxy.AbstractInvocation.Proceed() +56
  Glimpse.Mvc3.Interceptor.InvokeActionMethodInterceptor.Intercept(IInvocation invocation) +336
  Castle.DynamicProxy.AbstractInvocation.Proceed() +94
  Castle.Proxies.ControllerActionInvokerProxy.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +214
  System.Web.Mvc.&lt;&gt;c__DisplayClass15.&lt;InvokeActionMethodWithFilters&gt;b__12() +55
  System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +263
  System.Web.Mvc.&lt;&gt;c__DisplayClass17.&lt;InvokeActionMethodWithFilters&gt;b__14() +19
  System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +263
  System.Web.Mvc.&lt;&gt;c__DisplayClass17.&lt;InvokeActionMethodWithFilters&gt;b__14() +19
  System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +191
  System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343
  System.Web.Mvc.Controller.ExecuteCore() +116
  System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97
  System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
  System.Web.Mvc.&lt;&gt;c__DisplayClassb.&lt;BeginProcessRequest&gt;b__5() +37
  System.Web.Mvc.Async.&lt;&gt;c__DisplayClass1.&lt;MakeVoidDelegate&gt;b__0() +21
  System.Web.Mvc.Async.&lt;&gt;c__DisplayClass8`1.&lt;BeginSynchronous&gt;b__7(IAsyncResult _) +12
  System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
  System.Web.Mvc.&lt;&gt;c__DisplayClasse.&lt;EndProcessRequest&gt;b__d() +50
  System.Web.Mvc.SecurityUtil.&lt;GetCallInAppTrustThunk&gt;b__0(Action f) +7
  System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
  System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
  System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
  System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8920029
  System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) +184
  </code></pre>
  
  <p>Any help would be great    </p>