Sorgu modelinin bir uygulaması bulunamadı


107

Silverlight uygulamamda LINQ kullanarak bir veritabanı bağlantısı oluşturmaya çalışıyorum. Önce SQL sınıfına yeni bir LINQ ekledim ve "tblPersoon" adlı tablomu içine sürükledim.

Sonra servis dosyamda aşağıdaki sorguyu yürütmeye çalışıyorum:

[OperationContract]
public tblPersoon GetPersoonByID(string id)
{
    var query = (from p in tblPersoon where p.id == id select p).Single();

Ama tblPersoon'da bana şu hatayı veriyor.

'SilverlightApplication1.Web.tblPersoon' kaynak türü için sorgu modelinin bir uygulaması bulunamadı. "Nerede" bulunamadı.

Ve şunu denediğimde bile:

var query = (from p in tblPersoon select p).Single();

Bana 'Seç' bulunamadı diyen bir hata veriyor!

Tablom için oluşturulan sınıfın kodu burada bulunabilir: http://pastebin.com/edx3XRhi

Buna ne sebep oluyor ve bunu nasıl çözebilirim?

Teşekkür ederim.

Yanıtlar:


269

tblPersoonuygulamak IEnumerable<T>? Bunu kullanarak yapmanız gerekebilir:

var query = (from p in tblPersoon.Cast<Person>() select p).Single();

Bu tür bir hata ( Sorgu modelinin bir uygulaması bulunamadı ) genellikle şu durumlarda oluşur:

  • LINQ ad alanı kullanımı eksiksiniz ( using System.Linq)
  • Sorguladığınız tür uygulamıyor IEnumerable<T>

Düzenle :

tblPersoonÖzellik yerine type ( ) sorgulamanızdan ayrı olarak , aşağıdaki gibi tblPersoonsbir bağlam örneğine ( tblPersoonsözelliği tanımlayan sınıf ) da ihtiyacınız vardır :

public tblPersoon GetPersoonByID(string id)
{
    var context = new DataClasses1DataContext();
    var query = context.tblPersoons.Where(p => p.id == id).Single();
    // ...

My DataClasses1.Desinger.cs (LINQ otomatik oluşturur), IEnumerable <T> içermez. public System.Data.Linq.Table<tblPersoon> tblPersoons { get { return this.GetTable<tblPersoon>(); } } Ve kullandığımda: var query = (tblPersoon.Cast <Person> () içindeki p'den p) .Single (); .Cast üzerinde bana aşağıdaki hataları veriyor. 'SilverlightApplication1.Web.tblPersoon', 'Cast' için bir tanım içermiyor
Schoof

1
@ThomasSchoof: Yazım hatası olabilir mi? Type ise Özellik çağrılır tblPersoons( sondaki s işaretine dikkat edin ) tblPersoon. Türdeki özellik yerine türü sorgu yaparsınız.
km

Eğer var query = (from p in tblPersoons select p).Single();denersem bana tblPersoons'un var olmadığını söylüyor.
Schoof

1
Ben LINQ to SQL (dolayısıyla güncelleme veritabanına gerekiyordu sanmıyorum sorgu ancak üzerinde bu konularda biraz yardım bulabilirsiniz, Language Integrated Query olarak) SQL MSDN sayfasına LINQ ( Sorgulama olmadan Güncelleniyor bölümünde).
km

30
System.Linq kullanarak eklemek benim için yaptı .. :)
Guruprasad J Rao

188

usingDosyaya bir ifade eklemeniz gerekebilir . Varsayılan Silverlight sınıf şablonu şunları içermez:

using System.Linq;

Cevap için teşekkürler, ancak kullanım ifadesi zaten oradaydı.
Schoof

1
Cevabınız için teşekkürler ... bu sorunumu düzeltti !!! ama ... sağlayabileceğiniz ek bir açıklama var mı?
Joe

Harika !! Teşekkürler
blue piranha

çıldırtan. Teşekkür ederim.
Barry

32

Bu referansların dahil edildiğinden emin olun:

  • System.Data.Linq
  • System.Data.Entity

Ardından using ifadesini ekleyin

using System.Linq;

1
Çok teşekkür ederim
Muhammed Z.Aljezawi

7

Kesin yazılmış veri kümeleriyle benzer bir sorun yaşadım, tam hata mesajı şuydu:

'MyApp.InvcHeadDataTable' kaynak türü için sorgu modelinin bir uygulaması bulunamadı. "Nerede" bulunamadı. 'Row' aralık değişkeninin türünü açıkça belirtmeyi düşünün.

Kodumdan:

        var x =
            from row in ds.InvcHead
            where row.Company == Session.CompanyID
            select row;

Bu yüzden önerdiği gibi yaptım ve türü açıkça belirttim:

        var x =
            from MyApp.InvcHeadRow row in ds.InvcHead
            where row.Company == Session.CompanyID
            select row;

Hangi bir tedavi işe yaradı.


5

Bir eşitliği kaçırıyorsunuz:

var query = (from p in tblPersoon where p.id == 5 select p).Single();

where deyimi bir boole ile sonuçlanmalıdır.

VEYA hiç kullanmamalısınız where:

var query = (from p in tblPersoon select p).Single();

Teşekkürler, gerçekten de eşitliğimi özlüyordum, bu benim aptallığımdı. Ama şimdi aşağıdaki hatayı alıyorum: Hata 1 'SilverlightApplication1.Web.tblPersoon' kaynak türü için sorgu modelinin bir uygulaması bulunamadı. "Nerede" bulunamadı.
Schoof

0

Başlıkta açıklananla aynı hatayı aldım, ancak benim için yalnızca LinqToExcel ile kullanılmak üzere Microsoft access 12.0 oledb yeniden dağıtılabilir yüklüyordu.


0

Merhaba , bunu yapmanın en kolay yolu, bu IEnumerable'ı Sorgulanabilir hale getirmektir.

Sorgulanabilirse, sorgu yapmak kolaylaşır.

Lütfen bu kodu kontrol edin:

var result = (from s in _ctx.ScannedDatas.AsQueryable()
                              where s.Data == scanData
                              select s.Id).FirstOrDefault();
                return "Match Found";

System.Linq'i eklediğinizden emin olun . Bu şekilde hatanız çözülecektir.


0

Bu hatadan çok fazla zaman harcayanlar (benim gibi) için:

Aynı hatayı aldım: "'DbSet' kaynak türü için sorgu kalıbı uygulaması bulunamadı" ancak benim için çözüm DbContext düzeyinde bir hatayı düzeltmekti.

Bağlamımı oluşturduğumda şuna sahiptim:

public class ContactContext : DbContext
    {
        public ContactContext() : base() { }

        public DbSet Contacts { get; set; }
    }

Ve Depom (ASP.NET kılavuzunda bir Depo modelini takip ediyordum) şöyle görünüyordu:

public Contact FindById(int id)
    {       
        var contact = from c in _db.Contacts where c.Id == id select c;
        return contact;
    }

DbSet'i tür yerine genel olarak kullandığımda sorunum DbContext'in ilk kurulumundan geldi.

Değiştim public DbSet Contacts { get; set; }için public DbSet<Contact> Contacts { get; set; }ve aniden sorgu tanındı.


Muhtemelen km'nin cevabında söylediği şey buydu, ama bahsettiğinden IEnumerable<t>ve bahsetmediğinden DbSet<<YourDomainObject>>, bu baş ağrısına neden olan satırı bulmak için birkaç saat boyunca kodu araştırmak zorunda kaldım.


0

Ben de aynı hatayı aldım, ancak benim için bu, bir veritabanına ve aynı ada sahip bir tabloya sahip olmakla ilişkilendirildi. ADO .NET Varlık Nesnesini projeme eklediğimde, veritabanı bağlam dosyamda istediklerimi yanlış oluşturdu:

// Table
public virtual DbSet<OBJ> OBJs { get; set; }

hangisi olmalıydı:

public virtual DbSet<OBJ> OBJ { get; set; }

Ve

// Database?
public object OBJ { get; internal set; }

Aslında gerçekten ihtiyacım olmadığı için yorum yaptım.

Hatamı aldığımda, kontrolörümde masamı böyle çekmeye çalışıyordum:

protected Model1 db = new Model1();

public ActionResult Index()
{
    var obj =
        from p in db.OBJ
        orderby p.OBJ_ID descending
        select p;

    return View(obj);
}

Veritabanı bağlamımı düzelttim ve bundan sonra her şey yolundaydı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.