2015-08-19 2 views
1

Возможно ли с помощью подхода Entity Framework кодовым первым отобразить уже созданные хранимые процедуры?Сопоставление сложной хранимой процедуры с первым подходом к коду

Например, у меня есть сложная хранимая процедура, и я хочу сопоставить ее с первым подходом кода.

Я запустил скрипт для создания хранимой процедуры с использованием миграции, чтобы процедура всегда была доступна, но как сопоставить ее с первым подходом кода?

ответ

0

AFAIK, нет встроенной поддержки для отображения хранимой процедуры в кодовом режиме. Вы должны вручную вызвать эту процедуру, хотя вы можете сопоставить результаты процедуры, используя метод ObjectContextTranslate.

E.g.

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(); 
    } 
} 

Можно также отобразить хранимую процедуру, которая возвращает более сложный тип, если вы используете .EDMX файл. См. this MSDN article для получения более подробной информации.

Примечание: вы можете добавить шаблон T4, чтобы добавить настраиваемое сопоставление, чтобы добавлять настраиваемое сопоставление хранимых процедур каждый раз, когда генерируется .EDMX.

+0

Возможно ли иметь edmx для первого подхода кода? –

+0

Возможно в пути. С установленными [Entity Frameworks Power Tools] (http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d) вы можете щелкнуть контекст контекста в своем представлении, щелкнув мышью на «Entity Framework», , затем выберите «Просмотреть модель данных сущности». Это приведет к созданию EDMX из вашего класса dbcontext. – vendettamit

+0

Большое спасибо. Он отлично работает! –