是否可以使用Entity Framework代码优先方法映射已创建的存储过程?
例如,我有一个复杂的存储过程,我想用代码第一种方法映射它。
我将运行使用迁移创建存储过程的脚本,因此该过程将始终可用,但如何使用代码优先映射它?
答案 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
时添加自定义存储过程映射。