表的数据库结构如下。
CREATE TABLE [dbo].[StepVariables]
(
[Id] [int] IDENTITY(1,1) NOT NULL,
[VariableId] [int] NOT NULL,
[Value] [varchar](max) NOT NULL,
[StepVariableId] [int] NOT NULL,
CONSTRAINT [PK_StepVariables]
PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
我的查询看起来是这样的。
List<StepVariable> stepVariables;
using (HHEDataContext context = new HHEDataContext("HHEDatabase"))
{
stepVariables = (from sv in context.StepVariables
where sv.StepId == stepId
select sv).ToList();
}
return stepVariables;
我的实体对象看起来是这样的。
public class StepVariable
{
public int Id { get; set; }
public int VariableId { get; set; }
public int StepVariableId { get; set; }
public string Value { get; set; }
}
当我运行这个时,我得到以下错误。
执行命令定义时出错。有关详细信息,请参阅内部异常。
{System.Data.SqlClient.SqlClient.SqlConnection.OnError(SqlCeption异常,Boolean breakConnection,Action1wrapCloseInAction)
System.Data.SqlClient.TdSparser.ThrowExceptionandWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)
列名称“StepAction_ID”无效。D.RunExecuteReaderTDS(CommandBehavior cmdBehavior,RunBehavior RunBehavior,Boolean returnStream,Boolean async,Int32 timeout,task&;task,Boolean asyncWrite,SqlDataReader ds)位于System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior RunBehavior,Boolean asyncWrite,Boolean asyncWrite,task&;task,BooleanTernalDispatcher1.Dispatch[TTarget,TInterceptionContext,tResult](TTarget target,Func
3操作,TInterceptionContext interceptionContext,Action3执行,Action
3执行)System.Data.Entity.Infrastructure.Interception.DBCommandDispatcher.Reader(DbCommand命令,DbCommandInterceptionContext interceptionContext)System.Data.Entity.Internal.InterceptableDBCommand.ExecuteDBDataReader(
有人知道stepaction_id是从哪里来的吗?此数据库中的其他查询工作正常。
你在使用自定义惯例吗?因为默认情况下Id应该用作密钥,但可能取决于EF的版本
请在此查看https://msdn.microsoft.com/en-us/data/jj679962.aspx
无论如何,如果您可以重命名Id属性,请尝试使用StepVariableId查看错误是否消失
或者,由于您没有发布整个类,您是否有一个可以导航到StepAction实例的属性?
我还没有能力仅仅将其作为注释添加,但这里最有可能的情况是,数据库表中有列“stepaction_id”,这会混淆实体框架,因为模型没有处理它。
编辑:那个表有什么样的关系?