c# - Entity Framework : Unknown column in 'where clause

标签 c# asp.net-mvc entity-framework

我正在开发一个应用程序,该应用程序将概述当天在影院放映的电影。

我得到以下异常

Unknown column 'Extent2.Movie_ID' in 'where clause

这是抛出异常的地方(额外的变量 movies2,只是我为调试所做的事情):

public ActionResult MoviesToday()
{                
    var todaysDate = Convert.ToDateTime(DateTime.Now).Date;
    var showsToday = db.Shows.Where(s => s.StartTime.Year == todaysDate.Year && s.StartTime.Month == todaysDate.Month && s.StartTime.Day == todaysDate.Day);
    var movies = from firstItem in db.Movies
                 join secondItem in showsToday
                      on firstItem equals db.Movies.Where(x => x == secondItem.Movie).FirstOrDefault()
                 select firstItem;            
    movies = movies.Distinct();

    movies = movies.OrderBy(m => m.Name);
    var movies2 = movies.ToList(); // HERE THE EXCEPTION is THROWN
    return View(movies2);
}

这是我的Show 模型类:

public class Show
{
        public int ID { get; set; }        
        public DateTime StartTime { get; set; }
        public string BookingLink { get; set; }
        public string StartTimeAsString { get; set; }

        public Movie Movie { get; set; }
        public Theater Theater { get; set; }
    }

你能看出哪里出了问题吗?

编辑:完整的异常详细信息 + 堆栈跟踪:

System.Data.Entity.Core.EntityCommandExecutionException was unhandled by user code
  HResult=-2146232004
  Message=An error occurred while executing the command definition. See the inner exception for details.
  Source=EntityFramework
  StackTrace:
       vid System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
       vid System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)
       vid System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__6()
       vid System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
       vid System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__5()
       vid System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute[TResult](Func`1 operation)
       vid System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
       vid System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
       vid System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
       vid System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
       vid System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
       vid CinemaWeb.Controllers.MoviesController.MoviesToday() i d:\Development\Cinema\CinemaWeb\Controllers\MoviesController.cs:rad 31
       vid lambda_method(Closure , ControllerBase , Object[] )
       vid System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
       vid System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
       vid System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
       vid System.Web.Mvc.Async.AsyncControllerActionInvoker.ActionInvocation.InvokeSynchronousActionMethod()
       vid System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
       vid System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
       vid System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
       vid System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
       vid System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
       vid System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()
       vid System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
  InnerException: MySql.Data.MySqlClient.MySqlException
       HResult=-2147467259
       Message=Unknown column 'Extent2.Movie_ID' in 'where clause'
       Source=MySql.Data
       ErrorCode=-2147467259
       Number=1054
       StackTrace:
            vid MySql.Data.MySqlClient.MySqlStream.ReadPacket()
            vid MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
            vid MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId)
            vid MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
            vid MySql.Data.MySqlClient.MySqlDataReader.NextResult()
            vid MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
            vid MySql.Data.Entity.EFMySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
            vid System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
            vid System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<Reader>b__c(DbCommand t, DbCommandInterceptionContext`1 c)
            vid System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
            vid System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext)
            vid System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior)
            vid System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
            vid System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
       InnerException: 

编辑 3:我认为我在 Show 和 Movie 之间设置映射的方式显然有问题,但我发现的示例建议我以这种方式实现它。为清楚起见,我希望一个节目包含一部电影和一个剧院。

最佳答案

我进行了搜索,找到了这个:Entity Framework 5 complex type and unknown column in field list error

复制: 默认情况下,EF 需要 {complextypename_propertyname} 形式的复杂类型属性列。如果您手动创建表并以不同方式命名列,则会出现不匹配。您能否尝试相应地重命名列(即 street 到 address_street)并尝试它是否有效。或者,您应该能够向复杂类型的属性添加一个属性,以告诉 EF 不应使用约定,而应使用您指定的名称(例如 [Column("street")] 用于街道属性)。

此外,我建议您在 where 子句中使用像“Id”这样的属性,我像您一样在比较 2 个对象时遇到了很多问题。

例如: var movies = 来自 db.Movies 中的第一个项目 加入 secondItem in showsToday 在 firstItem 上等于 db.Movies.FirstOrDefault(x => x.ID == secondItem.Movie.ID) 选择第一项;

关于c# - Entity Framework : Unknown column in 'where clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33374564/

相关文章:

c# - 使用健康监控的 ASP.NET Web 应用程序日志记录不起作用

asp.net-mvc - 为上传的文件创建唯一文件名/位置的策略

asp.net-mvc - 如何在 cshtml View 中使用 WebGrid?

asp.net-mvc - Orchard CMS 安装错误?

c# - 无法从用法推断 GroupJoin 方法的类型参数

c# - 获取.NET Core 2.2中的默认 `AccountController`

c# - 为什么将我们的 .NET/SQL Server 网站移动到新主机会导致超过连接池大小?

c# - SignalR 自托管 Windows 服务,监听消息

c# - 如何避免在 C# LINQ 中连续嵌套 .Any

entity-framework - EF 迁移声称上下文发生了变化,但实际上没有