【问题标题】:How to call stored procedure without error in ADO.NET Entity Framework?如何在 ADO.NET Entity Framework 中正确调用存储过程?
【发布时间】:2009-06-13 11:09:42
【问题描述】:

如何在 ADO.NET Entity Framework 中调用存储过程而不出错?如果我使用下面的代码,我会得到一个错误:

adminNameContext.AddItemCategory(12, "ggf", DateTime.Now);  

错误:

数据读取器与指定的“NetTanitimTestModel.Categories”不兼容。类型的成员“ID”在数据读取器中没有同名的对应列。

ALTER procedure [dbo].[sp_AddItemCategory]  
(  
  @item int,   
  @category nvarchar(50),  
  @date smalldatetime   
)  
as  
begin  
  if(@item=-1)  
  begin  
    insert into Categories(PARENTID,Category,Date) values(null,@category,@date)  
  end  
  else  
  begin  
    insert into Categories(PARENTID,Category,Date) values(@item,@category,@date)  
  end  
end

我有包含 3 列的类别表:PARENTID,Category,Date

【问题讨论】:

  • 错误说明了一切:您试图引用结果集中不存在的列 ('ID')...
  • 向我们展示存储过程的样子(T-SQL 代码),并向我们展示它运行的表(表结构)
  • marc_s;我刷新了我的问题。请再看一遍:)
  • 我会强烈建议在开头使用“sp_”调用您的存储过程;该前缀保留供 Microsoft 使用ONLY。我不认为这是这里的问题,但作为最佳实践 - 永远不要调用您存储的过程 sp_(something) - 使用 proc_(something) 或其他任何东西。

标签: c# .net linq entity-framework linq-to-entities


【解决方案1】:

您的 EF 数据模型和数据库似乎不再同步。似乎 EF 数据模型中的“类别”对象有一个“ID”字段,但表没有。

我会从数据库中更新 EF 数据模型,看看是否能解决问题。为此,请打开 EDMX 设计器并右键单击设计界面中的空白点,然后选择“从数据库更新模型”选项。这应该会使两个世界重新同步。

马克

【讨论】:

  • EF 数据模型中的“类别”对象上有哪些字段?
【解决方案2】:

米奇小麦给了你答案。您正在尝试使用 ID 列,但该表有一个 PARENTID 列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    相关资源
    最近更新 更多