9

Bu basit bir cevabı olabilir ama ben EF CTP5 ile saklı yordamı yürütmek nasıl göremez.Varlık Çerçevesi CTP5 - Saklı Yordam Çağrısı Nasıl Yapılır?

ExecuteFunction("ContainerName.StoredProcName", new ObjectParameter("Id", id)):

İdare Framework 4.0, biz yaptık. ObjectContext bir yöntemdir

.

Ama DbContext böyle bir yöntem vardır.

Nasıl bir saklı yordam denir? EF CTP5'te desteklenmiyor mu?

DÜZENLEME:

var people = context.People.SqlQuery("EXECUTE [dbo].[GetAllPeople]"); 

Bu, bazı kaygı uyandırmaktadır:

Bunu yapmak gerekir hangi durumları this thread bulundu

1) Artık prodedure saklanan aradığınız seti değil bağlam. Saklı yordamlar, belirli bir varlık kümesine bağlı olmayan, bağlam çapında kullanılabilir olmalıdır. Tıpkı "Tablo" altında değil, SQL Server'da "Veritabanı" altında oldukları gibi.

2) karmaşık türleri ne olacak? Daha önce saklı bir prosedürden döndürülmüş karmaşık bir tür vardı. Ama şimdi, doğrudan bir varlığa eşlemek zorundasınız gibi görünüyor? Bu hiç mantıklı değil. Bir ObjectSet/DBSet tarafından doğrudan temsil edilmeyen bir tür döndüren çok sayıda saklı prok var.

Birisi bunu benim için temizleyebilir, çünkü şu ana kadar anladığım kadarıyla CTP5'e yükseltme yapamayacağım.

cevap

9

Sen benim soruya benim düzenlemem koymak tam olarak ne hangisi bu

using(var context = new MyContext()) 
{ 
    // custum sql statement 
    var c = context.Database.SqlQuery<int>("SELECT COUNT(*) FROM Employees"); 

    // returned entity type doesn't have to be represented by ObjectSet/DBSet 
    var e = context.Database.SqlQuery<Employee>("SELECT * FROM Employees"); 

    // stored procedure 
    var q = context.Database.SqlQuery<Employee>("GetEmployees"); 
} 
+0

gibi veritabanı çapında sql ifadeleri yürütebilirsiniz. – RPM1984

+2

Bu, ilk kaygınızı yanıtlıyor. Sp'ler, içerik çapında kullanılabilir. DbContext.Database, yerleşik DbDatabase nesnesine bir başvurudır. Bu, DbSet üzerinde çalışan context.People.SqlQuery'den farklıdır. –

+0

Ahh sağın, bunu bir ver ve sana geri dönecek. – RPM1984

İlgili konular