2012-10-03 70 views
6

我在這裏爲表進行映射..如何在這裏映射存儲過程?如何在ASP.NET MVC 3實體框架中使用DBContext映射存儲過程

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

代碼首先不支持存儲過程。

可以初始化劑使用在數據庫中執行腳本:

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初始化者從給定源創建給定名稱的存儲過程。強類型方法調用存儲過程。

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中進行模型頁面,並在模型頁面的右鍵選項中選擇從數據庫更新模型。然後在模型瀏覽器>功能導入選擇導入的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); 

希望得到這個幫助。

相關問題