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

コードは最初にストアドプロシージャをサポートしていません。

以下を使用して、データベース初期化機能でスクリプトを実行できます。

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

これを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 に答える
0

DB Context と DB First Approach を使用しています。ストアド プロシージャを作成した後、VS のモデル ページに移動し、モデル ページの右クリック オプションで [データベースからモデルを更新] を選択します。次に、[モデル ブラウザー] > [関数のインポート] で、インポートされた SP を選択します。これらの名前や戻り値などを変更したい場合は、このすべての後、内部メソッドまたは他のエンティティ クラスと同じように SP を使用できます。たとえば、名前が " sp_UserUpdate" の SP があるとします。この SP は内部パラメーターとしてuserName試験用に取得し、結果ステータス用の出力パラメーターを持っています。SP を VS にインポートした後、以下と同じように使用できます。userAgeres

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

この助けを願っています。

于 2013-09-26T11:56:01.637 に答える