2012-10-03 37 views
6

ここではテーブルのマッピングを行います。ここでストアドプロシージャをマップする方法は?ASP.NET MVC 3のDBContextを使用してストアドプロシージャをマップする方法Entity Framework

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); 
    } 
} 
+1

EFコードを先に使用している場合は、おそらくこの回答が役に立ちます:http://stackoverflow.com/a/6622949/390819 – GolfWolf

答えて

6

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

あなたが使用してイニシャライザデータベースでスクリプトを実行することができます。

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

あなたがそうのような文脈から手順にそれらを実行することができます:私は素敵なオブジェクト指向のモデルにこれを包む、個人的に

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

。私は強く型付けされたメソッドを持つSPクラスを特化しています。これらのメソッドは、指定されたソースから指定された名前のストアドプロシージャを作成するようDB初期化子に指示する属性で装飾されています。強力な型のメソッドは、ストアドプロシージャを呼び出します。

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> 

でこれを追加

0

私はDBコンテキストとDBファーストアプローチを使用しています。ストアドプロシージャを作成した後、VSのモデルページにアクセスし、モデルページの右クリックオプションで[データベースからモデルを更新]を選択します。 Model Browser> Function ImportsでインポートされたSPを選択し、名前、戻り値などを変更したい場合は、この後も内部メソッドやその他のエンティティクラスと同じSPを使用できます。たとえば、このSPの名前が "sp_UserUpdate"のこのSPの場合はuserName、検査の場合はuserAgeを内部パラメータとし、resの結果ステータスはoutパラメータとします。 VSでSPをインポートした後、次のように使用することができます。

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

このヘルプが必要です。

関連する問題