- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前在处理一些先使用 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
}
我的查询
public IEnumerable<VisitDetails> GetGuestVisiterList()
{
using (var db = new MyDatabase())
{
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();
}
}
我的 View 模型
public class GuestVisitDetails
{
public int PersonId { get; set; }
public string Forename { get; set; }
public string Surname { get; set; }
public int NumberOfVisits { get; set; }
}
但是当我尝试为我的数据库模型使用接口(interface)以便进行单元测试时,出现以下错误:
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; }
}
我的新查询,我创建了一个 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();
}
}
我发现是“NumberOfVisits”导致了问题,但不确定原因或解决方法。
根据请求的堆栈跟踪
[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();
}
}
如果您有任何问题或疑问或需要对任何部分进行说明,请告诉我。干杯。
关于c# - 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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7584014/
我正在尝试使用 y 组合器在 Scala 中定义 gcd: object Main { def y[A,B]( f : (A => B) => A => B ) : A => B = f(y(f)
我正在尝试了解返回指向函数的指针的函数,在我尝试编译代码后,它给了我这种错误: cannot convert int (*(int))(int) to int (*(int))(int) in ass
所以我一直在关注 youtube 上的游戏编程教程,然后弹出了这段代码:bufferedImageObject.getRGB(int, int, int, int, int[], int, int);
我正在将时间现在 与存储在数据库某处的时间进行比较。数据库中存储的时间格式为“yyyyMMddHHmmss”。例如,数据库可能会为存储的时间值返回 201106203354。然后我使用一个函数将时间现
例如 Maze0.bmp (0,0) (319,239) 65 120 Maze0.bmp (0,0) (319,239) 65 120 (254,243,90) Maze0.bmp (0,0) (
评论 Steve Yegge的post关于 server-side Javascript开始讨论语言中类型系统的优点和这个 comment描述: ... examples from H-M style
我正在研究 C 的指针,从 Deitel 的书中我不明白 int(*function)(int,int) 和 int*function(int, int) 表示函数时。 最佳答案 C 中读取类型的经验
您好,我使用 weblogic 11g 创建 war 应用程序,我对 joda time 的方法有疑问 new DateTime(int, int, int, int, int, int); 这抛出了
Create a method called average that calculates the average of the numbers passed as parameters. The
var a11: Int = 0 var a12: Int = 0 var a21: Int = 0 var a22: Int = 0 var valueDeterminant = a11 * a12
我正在为一个项目设置 LED 阵列。我得到了一个 LED 阵列,可以根据引脚变化电压进行更改,但我无法添加更多引脚。 当我尝试时,编译失败并显示错误:函数“int getMode(int, int,
除了创建对列表执行简单操作的函数之外,我对 haskell 还是很陌生。我想创建一个列表,其中包含 Int 类型的内容, 和 Int -> Int -> Int 类型的函数. 这是我尝试过的: dat
这个问题已经有答案了: Java add buttons dynamically as an array [duplicate] (4 个回答) 已关闭 7 年前。 StackOverFlow问题今天
我有几个 EditText View ,我想在其中设置左侧的图像,而 setCompoundDrawablesWithIntrinsicBounds 似乎不起作用。图形似乎没有改变。 有人知道为什么会
#include using namespace std; int main() { static_assert(is_constructible, int(*)(int,int)>::val
fun sum(a: Int, b: Int) = a + b val x = 1.to(2) 我在找: sum.tupled(x),或者 sum(*x) 当然,以上都不能用 Kotlin 1.1.3
有一个函数: func (first: Int) -> Int -> Bool -> String { return ? } 返回值怎么写?我对上面 func 的返回类型感到很困惑。 最
type foo = A of int * int | B of (int * int) int * int 和 (int * int) 有什么区别?我看到的唯一区别在于模式匹配: let test_
我正在尝试制作一个 slider 游戏。在这个类中,我使用 Graphics 对象 g2 的 drawImage 方法来显示“拼图”的 block 。但在绘制类方法中,我收到此错误:找不到符号方法dr
我试着理解这个表达: static Func isOdd = i => (i & 1) == 1; 但是这是什么意思呢? 例如我有 i = 3。然后 (3 & 1) == 1 或 i = 4。然后
我是一名优秀的程序员,十分优秀!