6

我在这里为表映射..如何在这里映射存储过程?

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);
    }
}
4

3 回答 3

6

Code First 不支持存储过程。

您可以使用以下方法在数据库初始化程序中执行脚本:

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

您可以像这样从上下文中执行程序:

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

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

于 2012-10-03T11:44:28.560 回答
0

我正在使用 DB Context 和 DB First Approach。创建存储过程后,进入VS中的模型页面,在模型页面的右键选项中选择从数据库中更新模型。然后在 Model Browser > Function Imports 中选择导入的 SP,如果我想更改它们的名称、返回值等。在所有这些之后,我可以使用与内部方法或其他实体类相同的 SP。例如,假设您有一个名为“ sp_UserUpdate”的 SP,此 SP 将userName考试userAge作为内部参数,并将res结果状态作为输出参数。在 VS 中导入 SP 后,您可以使用它,如下所示:

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

希望这有帮助。

于 2013-09-26T11:56:01.637 回答
0

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>

于 2012-11-07T11:53:48.257 回答