我在edmx文件中添加了对存储过程的引用,然后右键单击它并选择“Create Function Import”,它被添加到模型浏览器中EntityContainer下的Function Imports文件夹中。
据我了解,我应该可以这样使用它:
sampleEntities db = new sampleEntities();
db.SampleStoredProcedure();
但它没有显示在db对象上。我缺少一步吗?函数导入设置为public,没有返回值,以及展开时我可以看到的一个参数。
答案 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();
}
}
}
}