2016-02-10 19 views
11

Uygulamamı ASP.NET MVC Çekirdek ve Entity Framework Core'a geçiriyorum ve sorunla karşılaştım. BuHam SQL sorguları ve Varlık Çerçeve Çekirdeği

var rawSQL = dbContext.Database.SqlQuery<SomeModel>("Raw SQL Query").ToList(); 

gibi varlık ham SQL sorgusu var ama context.Database hiçbir SqlQuery<T> yoktur. Bu problem için çözümünüz var mı?

+0

'dbContext' düzgün' Entities' olarak başlatıldı mı:

var rawSQL = dbContext.SomeModels.FromSql("your SQL"); 

Daha da iyisi, yerine (SQL enjeksiyonu saldırı riski altında) ham SQL kullanarak bu FromSql yöntemi gibi parametreli sorguları kullanmak için izin verir? –

+0

@MatchesMalone Evet, normal LINQ düzgün çalıştığı için – Obin

+0

parametreleştirilmiş (veya değil) SQL'i kullanmak için bir uzantı yönteminin nasıl kullanılacağıyla ilgili cevabımı aşağıya bakın. – iberodev

cevap

11

Kullanabileceğiniz bir uzantı yöntemi olduğundan, using Microsoft.Data.Entity; eklediğinizden emin olun.

dbContext.SomeModels.FromSql("SELECT * FROM dbo.Blogs WHERE Name = @p0", blogName); 
+0

Genel olarak veritabanından ziyade, belirli varlık modelinden gelen SQL sorguları tuhaf bir şekilde çalışıyor. Enjeksiyon saldırıları hakkında biliyorum ve SQL parametreleri kullanıyorum ama örnekte basit bir problem göstermek istedim. Teşekkürler – Obin

+0

@iberodev sql sorgunuz iki tablo içeriyorsa nasıl yaparsınız? – nam

+0

@nam burada gösterildiği gibi: https://docs.efproject.net/en/latest/querying/raw-sql.html#composing-with-linq bir '.Include (b => b.Posts) ekleyerek Başka bir tablo ile katılıyorsunuz – iberodev