我在當前項目中首先使用實體框架代碼。數據庫由許多表,許多視圖和許多功能組成。我能夠使用Entity Framework Code First創建表格。但我無法找到使用實體框架代碼優先來創建存儲過程的方法。我知道數據庫優先戰略將滿足我的要求,一切運作良好,但我不希望將數據庫優先策略用於我現有的項目代碼。使用實體框架代碼優先創建存儲過程?
請幫我一下,使用Entity Framework Code First策略創建存儲過程的最佳方法是什麼?
請幫我一下,謝謝。
我在當前項目中首先使用實體框架代碼。數據庫由許多表,許多視圖和許多功能組成。我能夠使用Entity Framework Code First創建表格。但我無法找到使用實體框架代碼優先來創建存儲過程的方法。我知道數據庫優先戰略將滿足我的要求,一切運作良好,但我不希望將數據庫優先策略用於我現有的項目代碼。使用實體框架代碼優先創建存儲過程?
請幫我一下,使用Entity Framework Code First策略創建存儲過程的最佳方法是什麼?
請幫我一下,謝謝。
在EF6中,您可以使用Code First創建存儲過程。看看這個article
我通過給定了[文章](http://msdn.microsoft.com/en-us/data/dn468673)好像他們正在映射現有的存儲過程到實體。但我想**創建存儲過程**使用實體框架代碼的第一個策略(不要映射現有的存儲過程) – sridharnetha
換句話說,所有存儲過程應創建時,從包管理器控制檯運行「更新數據庫-Verbose」命令。 – sridharnetha
如果你正在使用遷移,那麼我認爲這是應該發生的。如果你正在使用初始化器,他們應該照顧相應地創建/更新數據庫。 – Pawel
隨着代碼首先,你總是進行遷移。遷移從DbMigration對象,它具有一個非常有用的方法繼承了:
DbMigration.Sql(字符串)
步驟如下:
1)從NuGet包管理器
打開包管理控制檯2)類型添加遷移CreateHelloWorldStoredProcedureExample
3)在Visual Studio會告訴你有兩個空方法的新類:上下
4)在截至方法,編寫代碼,這裏有一個例子
public override void Up()
{
StringBuilder storedProcedureCode = new StringBuilder();
storedProcedureCode.Append("CREATE PROCEDURE dbo.HelloWorld" + Environment.NewLine);
storedProcedureCode.Append("AS" + Environment.NewLine);
storedProcedureCode.Append("BEGIN" + Environment.NewLine);
storedProcedureCode.Append(@"SELECT 'Hello World'" + Environment.NewLine);
storedProcedureCode.Append("END" + Environment.NewLine);
this.Sql(storedProcedureCode.ToString());
}
而在向下的方法:
public override void Down()
{
this.Sql("DROP PROCEDURE dbo.HelloWorld ");
}
在此之後,只需運行更新數據庫,這就是它!
注意:如果您使用SQL Server,請避免使用GO語句。
順便說一句,對不起,我的英語。所有更正都很好! –
爲了搜索者的利益,這也適用於.NET Core(entityframworkcore)。這顯示了讓EF Core可以使用 - > https://github.com/aspnet/EntityFramework/issues/245的方式運行的另一種方式。然後你可以這樣調用它:var blogs = _context.Blogs。FromSql(「exec GetBlogForAuthorName @ p0」,「rod」); – HockeyJ
一旦更新命令執行,我們就不能更新過程定義。 –
而不是使用StringBuilder的,你可以使用現有的EF方法
的public override void Up()
{
CreateStoredProcedure(
"MyStoredProcedure",
p => new
{
id = p.Int()
},
@"SELECT some-data FROM my-table WHERE id = @id"
);
}
public override void Down()
{
DropStoredProcedure("MyStoredProcedure");
}
爲了搜索者的利益,在撰寫本文時,這對於.NET Core(entityframworkcore)不起作用。 – HockeyJ
好答案!!!我會編輯我的指向你的! –
請看一看這個蘇答案:http://stackoverflow.com/a/7667777/68571 – VansFannel