使用代码第一种方法映射复杂存储过程

时间:2015-08-19 19:59:39

标签: entity-framework stored-procedures

是否可以使用Entity Framework代码优先方法映射已创建的存储过程?

例如,我有一个复杂的存储过程,我想用代码第一种方法映射它。

我将运行使用迁移创建存储过程的脚本,因此该过程将始终可用,但如何使用代码优先映射它?

1 个答案:

答案 0 :(得分:0)

AFAIK,没有内置支持以代码优先映射存储过程。您必须手动调用该过程,但可以使用ObjectContext的{​​{1}}方法映射过程的结果。

E.g。

Translate

如果您使用using (var db = new BloggingContext()) { // If using Code First we need to make sure the model is built before we open the connection // This isn't required for models created with the EF Designer db.Database.Initialize(force: false); // Create a SQL command to execute the sproc var cmd = db.Database.Connection.CreateCommand(); cmd.CommandText = "[dbo].[GetAllBlogsAndPosts]"; try { db.Database.Connection.Open(); // Run the sproc var reader = cmd.ExecuteReader(); // Read Blogs from the first result set var blogs = ((IObjectContextAdapter)db) .ObjectContext .Translate<Blog>(reader, "Blogs", MergeOption.AppendOnly); foreach (var item in blogs) { Console.WriteLine(item.Name); } // Move to second result set and read Posts reader.NextResult(); var posts = ((IObjectContextAdapter)db) .ObjectContext .Translate<Post>(reader, "Posts", MergeOption.AppendOnly); foreach (var item in posts) { Console.WriteLine(item.Title); } } finally { db.Database.Connection.Close(); } } 文件,还可以映射返回更复杂类型的存储过程。有关详细信息,请参阅this MSDN article

注意:您可以添加T4模板以添加自定义映射,以便在每次生成.EDMX时添加自定义存储过程映射。