Note that there are some explanatory texts on larger screens.

plurals
  1. POEF-Code First: Unable to create a constant value of type ''. Only primitive types ('such as Int32, String, and Guid') are supported in this context
    text
    copied!<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>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload