Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF代码优先:无法创建类型为'';。在此上下文中仅支持基本类型(';如Int32、String和Guid';)_C#_Linq_Entity Framework_Ef Code First - Fatal编程技术网

C# EF代码优先:无法创建类型为'';。在此上下文中仅支持基本类型(';如Int32、String和Guid';)

C# EF代码优先:无法创建类型为'';。在此上下文中仅支持基本类型(';如Int32、String和Guid';),c#,linq,entity-framework,ef-code-first,C#,Linq,Entity Framework,Ef Code First,我目前在使用EF代码时遇到了一些linq问题。我当前的代码运行良好: 我的数据库模型 public class MyDatabase : DbContext { public DbSet<Person> People { get; set; } public DbSet<Role> Roles { get; set; } public DbSet<Visit> Visits { get; set; } } public clas

我目前在使用EF代码时遇到了一些linq问题。我当前的代码运行良好:

我的数据库模型

public class MyDatabase : DbContext
{
     public DbSet<Person> People { get; set; }
     public DbSet<Role> Roles { get; set; }
     public DbSet<Visit> 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<Person>();
    }

    [Key]
    public int RoleId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Person> People { get; set; }
     //There is a many to many relationship to person
}
但是,当我尝试为数据库模型使用接口以便进行单元测试时,会出现以下错误:

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
我的数据库接口

public class MyDatabase : DbContext, IDolphinDatabase
{
     public IDbSet<Person> People { get; set; }
     public IDbSet<Role> Roles { get; set; }
     public IDbSet<Visit> Visits { get; set; }
}

public interface IMyDatabase : IDisposable
{
     public IDbSet<Person> People { get; set; }
     public IDbSet<Role> Roles { get; set; }
     public IDbSet<Visit> Visits { get; set; }
}
公共类MyDatabase:DbContext,数据库 { 公共IDbSet人员{get;set;} 公共IDbSet角色{get;set;} 公共IDbSet访问{get;set;} } 公共接口IMyDatabase:IDisposable { 公共IDbSet人员{get;set;} 公共IDbSet角色{get;set;} 公共IDbSet访问{get;set;} } 在我的新查询中,我创建了一个dbFactory来获取IMyDatabase

public IEnumerable<VisitDetails> GetGuestVisiterList(int paperId)
{
    using (var db = _dbFactory.GetDatabase())
    {
        return (from p in db.People
                where p.Roles.Any(a => a.Name == "Guest")
                select new GuestVisitDetails
                 {
                     PersonId = p.PersonId,
                     Forename = p.Forename,
                     Surname = p.Surname,
                     NumberOfVisits = db.Visits.Count(v => v.PersonId == p.PersonId && v.VisitStatus != "Complete")
                 }).ToList();
    }    
}
public IEnumerable GetGuestVisiterList(int paperId)
{
使用(var db=\u dbFactory.GetDatabase())
{
返回(从数据库中的p返回)
其中p.Roles.Any(a=>a.Name==“Guest”)
选择新的访客浏览详情
{
PersonId=p.PersonId,
名字=p.名字,
姓氏,
numberofvisions=db.visions.Count(v=>v.PersonId==p.PersonId&&v.VisitStatus!=“完成”)
}).ToList();
}    
}
我发现是“NumberOfVisitions”导致了这个问题,但我不确定为什么或者如何解决它

根据请求,堆栈跟踪

[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.<>c__DisplayClass77.<TypedTranslate>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& 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& binding) +88
System.Data.Objects.ELinq.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& 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<T>.GetEnumerator() +44
System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator() +40
System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() +40
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +315
System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
MyVisits.Business.<GetGuestVisiterList>c__Binding.Invoke(Object& 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.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +55
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +263
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +263
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>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.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50
System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>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& completedSynchronously) +184
[NotSupportedException:无法创建类型为“MyVisits.Data.Model.Visit”的常量值。在此上下文中仅支持基本类型('例如Int32、String和Guid')。]
System.Data.Objects.Elink.ConstantTranslator.TypedTranslate(ExpressionConverter父级,ConstantPression linq)+902
System.Data.Objects.Elink.TypedTranslator`1.Translate(表达式转换器父级,表达式linq)+54
System.Data.Objects.Elink.ExpressionConverter.TranslateExpression(表达式linq)+110
System.Data.Objects.ELinq.c__显示类77.b__75(表达式e)+11
System.Linq.WhereSelectEnumerableIterator`2.MoveNext()+151
System.Data.Common.CommandTrees.ExpressionBuilder.Internal.EnumerableValidator`3.Validate(IEnumerable`1参数、String argumentName、Int32 expectedElementCount、Boolean allowEmpty、Func`3映射、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参数,String argumentName,Boolean allowEmpty,Action`2 validationCallback)+142
System.Data.Common.CommandTrees.ExpressionBuilder.Internal.ArgumentValidation.ValidateNewCollection(IEnumerable`1元素、DbExpressionList和validElements)+72
System.Data.Objects.Elink.NewArrayInitTranslator.TypedTranslate(表达式转换器父级,NewArrayExpression linq)+121
System.Data.Objects.Elink.TypedTranslator`1.Translate(表达式转换器父级,表达式linq)+54
System.Data.Objects.Elink.ExpressionConverter.TranslateExpression(表达式linq)+110
System.Data.Objects.Elink.ConstantTranslator.TypedTranslate(表达式转换器父级,ConstantPression linq)+520
System.Data.Objects.Elink.TypedTranslator`1.Translate(表达式转换器父级,表达式linq)+54
System.Data.Objects.Elink.ExpressionConverter.TranslateExpression(表达式linq)+110
System.Data.Objects.elink.AggregateTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用)+86
System.Data.Objects.Elink.SequenceMethodTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用,SequenceMethod SequenceMethod)+14
System.Data.Objects.Elink.MethodCallTranslator.TypedTranslate(ExpressionConverter父级,MethodCallExpression linq)+102
System.Data.Objects.Elink.TypedTranslator`1.Translate(表达式转换器父级,表达式linq)+54
System.Data.Objects.Elink.ExpressionConverter.TranslateExpression(表达式linq)+110
System.Data.Objects.Elink.MemberInitTranslator.TypedTranslate(ExpressionConverter父级,MemberInitExpression linq)+310
System.Data.Objects.Elink.TypedTranslator`1.Translate(表达式转换器父级,表达式linq)+54
System.Data.Objects.Elink.ExpressionConverter.TranslateExpression(表达式linq)+110
System.Data.Objects.eliq.ExpressionConverter.TranslateLambda(LambdaExpression lambda,DbExpression input)+80
System.Data.Objects.eliq.ExpressionConverter.TranslateLambda(LambdaExpression lambda,DbExpression输入,DbExpressionBinding&binding)+88
System.Data.Objects.ELinq.onelambdatatranslator.Translate(ExpressionConverter父级、MethodCallExpression调用、DbExpression&source、DbExpressionBinding&sourceBinding、DbExpression&lambda)+85
System.Data.Objects.elink.SelectTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用)+37
System.Data.Objects.Elink.SequenceMethodTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用,SequenceMethod SequenceMethod)+14
System.Data.Objects.Elink.MethodCallTranslator.TypedTranslate(ExpressionConverter父级,MethodCallExpression linq)+102
System.Data.Objects.Elink.TypedTranslator`1.Translate(表达式转换器父级,表达式linq)+54
System.Data.Objects.Elink.ExpressionConverter.TranslateExpression(表达式linq)+110
System.Data.Objects.elink.ExpressionConverter.Convert()+16
System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)+110
System.Data.Objects.ObjectQuery`1.GetResults(可为null`1 forMergeOption)+149
System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator()+44
System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator()+40
System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator()+40
System.Collections.Generic.List`1..ctor(IEnumerable`1 Collections)
public IEnumerable<VisitDetails> GetGuestVisiterList(int paperId)
{
    using (var db = _dbFactory.GetDatabase())
    {
        return (from p in db.People
                where p.Roles.Any(a => a.Name == "Guest")
                select new GuestVisitDetails
                 {
                     PersonId = p.PersonId,
                     Forename = p.Forename,
                     Surname = p.Surname,
                     NumberOfVisits = db.Visits.Count(v => v.PersonId == p.PersonId && v.VisitStatus != "Complete")
                 }).ToList();
    }    
}
[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.<>c__DisplayClass77.<TypedTranslate>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& 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& binding) +88
System.Data.Objects.ELinq.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& 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<T>.GetEnumerator() +44
System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator() +40
System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() +40
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +315
System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
MyVisits.Business.<GetGuestVisiterList>c__Binding.Invoke(Object& 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.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +55
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +263
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +263
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>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.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50
System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>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& completedSynchronously) +184
public class Person
{
     public int PersonId { get; set; }
     public string Forename { get; set; }
     public string Surname { get; set; } 

     // add a collection-reference to roles
     public virtual ICollection<Role> Roles { get; set; } 

     // add a collection-reference to visites
     public virtual ICollection<Visit> Visits { get; set; }  
}
public class Visit
{
     public int VisitId { get; set; }
     public string Name {get; set;}
     public string VisitStatus { get; set; }

     public int PersonId { 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<Person>();
    }

    [Key]
    public int RoleId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Person> People { get; set; }
     //There is a many to many relationship to person
}
public IEnumerable<VisitDetails> GetGuestVisiterList(int paperId)
{
    using (var db = _dbFactory.GetDatabase())
    {
        return (from p in db.People
                where p.Roles.Any(a => a.Name == "Guest")
                select new GuestVisitDetails
                 {
                     PersonId = p.PersonId,
                     Forename = p.Forename,
                     Surname = p.Surname,
                     NumberOfVisits = p.Visits.Count(v => v.VisitStatus != "Complete")
                 }).ToList();
    }    
}