如何在 MVC 3 实体框架中使用 DBContext 映射存储过程 ASP.NET



我在这里为表格做映射。如何在此处映射存储过程?

public class AppDBContext : DbContext
{
    public DbSet<UserAccount> UserAccount { get; set; }
    public DbSet<GetUserAccounts> GetGetUserAccounts { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<UserAccount>().ToTable("UserAccount");
        modelBuilder.Entity<Customer>().ToTable("Customer");
        base.OnModelCreating(modelBuilder);
    }
}

代码优先不支持存储过程。

您可以使用以下命令在数据库初始化器中执行脚本:

string sql = "CREATE PROCEDURE [MyProc]...";
context.Database.ExecuteSqlCommand(sql);

您可以从上下文中执行过程,如下所示:

string command = "EXEC MyProc";
IEnumerable<T> results = context.Database.SqlQuery<T>(command, null);

就个人而言,我将其包装成一个不错的OO模型。我有专门的SP类,使用强类型方法。这些方法使用一个属性进行修饰,该属性告知数据库初始化器从给定源创建给定名称的存储过程。强类型方法调用存储过程。

AppDBContext中添加以下内容:

public virtual ObjectResult<ResultObject> MyStoredProcedure(string parameter)
        {
            ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(ResultObject).Assembly);
            var Param = parameter!= null ?
                new ObjectParameter("Column", parameter) :
                new ObjectParameter("Column", typeof(string));
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<ResultObject>("MyStoredProcedure", Param);
        }

将其添加到 .edmx 文件中

<FunctionImport Name="MyStoredProcedure" ReturnType="Collection(AppDBContext.ResultObject)" >
      <Parameter Name="ZipCode" Mode="In" Type="String" />
      </FunctionImport>

我正在使用数据库上下文和数据库优先方法。创建存储过程后,转到VS中的模型页,然后在"模型"页的右键单击选项中选择"从数据库更新模型"。然后在模型浏览器中>函数导入中选择导入的 SP,如果我想更改它们的名称、返回值等,在所有这些之后,我可以像内部方法或其他实体类一样使用 SP。例如,假设您有一个名称为"sp_UserUpdate"的 SP,该 SP 将userName和考试userAge作为内部参数,res并将 out 参数作为结果状态的 out。在VS中导入SP后,您可以按如下方式使用它:

System.Data.Objects.ObjectParameter pRes = new System.Data.Objects.ObjectParameter("res", 0);
db.sp_UserUpdate(userName , userAge , pRes);

希望这有帮助。

最新更新