实体框架中的存储过程

时间:2009-10-01 20:13:06

标签: entity-framework stored-procedures

我试图在实体框架中使用一个不返回任何内容的存储过程。存储过程纯粹用于记录。

我添加了一个函数(右键单击 - > add - >函数导入),仅当返回值设置为其中一个实体时才有效。当我将返回类型更改为Int32,Bool或任何其他值或实体之外的任何其他值时,只要我点击构建按钮,函数(方法)就会消失。

有关如何对此进行排序的任何建议?

3 个答案:

答案 0 :(得分:7)

现在你不能 - 你必须使用你的模型中定义的一个实体(虽然我认为像INT这样的基本标量类型也应该有效。)

EF4应该会有更好的效果 - 将于2009年底或2010年初推出。

有关这些新功能的一些信息,请参阅这些文章:

如果你的存储过程纯粹用于日志记录,我可能只是在实体框架上下文之外表示它,并且只是将存储过程调用为老式的ADO.NET方式....为什么甚至打扰将所有内容放入EF背景?您不是使用此日志记录服务检索,操作和存储数据 - 只需将其作为静态类的静态方法 - 保持简单!

马克

答案 1 :(得分:5)

这是从实体框架执行存储过程的一种方法:

            using (SEntities se = new SEntities())
            {
                EntityConnection entityConnection = (EntityConnection)se.Connection;
                DbConnection storeConnection = entityConnection.StoreConnection;

                storeConnection.Open();

                DbCommand command = storeConnection.CreateCommand();
                command.CommandText = "NameOfStoredProcedure";
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.Add(new SqlParameter("param1", value_of_param1));
                command.Parameters.Add(new SqlParameter("param2", value_of_param2));

                SqlParameter param3 = new SqlParameter();
                pA.SqlDbType = SqlDbType.Bit;
                pA.ParameterName = "@param3";
                pA.Direction = ParameterDirection.Output;
                command.Parameters.Add(param3);

                command.ExecuteNonQuery();

                returnValue = Convert.ToBoolean(param3.Value);
            }

答案 2 :(得分:1)

从EF 4.1开始,它是可能的。直到Ef 4.0,这是不可能的。 您可以使用以下行来调用ef 4.1中的sp

res = ctx.Database.SqlQuery<MyResultType1>(...your SP call...);

如需进一步说明,请参阅Handle Stored Procedure in Entity Framework