实体框架存储过程不可用

时间:2010-02-11 22:36:32

标签: c# entity-framework stored-procedures

我在edmx文件中添加了对存储过程的引用,然后右键单击它并选择“Create Function Import”,它被添加到模型浏览器中EntityContainer下的Function Imports文件夹中。

据我了解,我应该可以这样使用它:

sampleEntities db = new sampleEntities();
db.SampleStoredProcedure();

但它没有显示在db对象上。我缺少一步吗?函数导入设置为public,没有返回值,以及展开时我可以看到的一个参数。

2 个答案:

答案 0 :(得分:7)

您的存储过程是否返回一个简单的(即标量)值?如果是这样,设计师will not generate the code for you

  

如果将返回类型设置为简单   类型,Visual Basic或C#不是   自动生成的   功能导入。

但是,这已修复in the newest version of the Entity Framework

  

您可以选择“无”和“标量”   你以前可以返回类型。   但是,当“功能导入”是   创建后,会注入一些新代码   进入模型代码后面的文件   将存储过程具体化为   对ObjectContext的操作   本身。

答案 1 :(得分:3)

您可以使用EntityCommand类执行存储过程,将新存储过程添加到实体数据模型,然后将其添加为函数并命名,然后执行存储过程:

public bool ExecuteCMD(string Command) 
{
    using (var entities = new DbEntities())
    {
        var conn = new System.Data.EntityClient.EntityConnection(entities.Connection.ConnectionString);
        try
        {
            conn.Open();
            using (EntityCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = "DbEntities." + Command;
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.ExecuteNonQuery();
            }
            return true;
        }
        catch
        {
            return false;
        }
        finally
        {
            if (conn != null)
            {
                conn.Close();
            }
        }
    }
}