2010-11-28 7 views
2

In dem Bemühen, meine Repository-Ebene weiter zu abstrahieren, habe ich versucht, dem Code-First-Ansatz zu folgen, wie hier beschrieben: http://msdn.microsoft.com/en-us/magazine/ee236639.aspx.code first approach error: Der angegebene Typ member 'xxxxx' wird in LINQ to Entities nicht unterstützt.

Ich habe eine Viele-zu-viele-Beziehung zwischen Account- und Subscription-Entitäten. Eine Navigationseigenschaft existiert für jede Entität, die auf die andere verweist (z. B. Account.Abonnements).

Bevor ich mein eigenes Modell erstellt ich das Entity generierte Modell wurde mit und die unten geklappt hat („db“ ist der Kontext juristische Person):

public IQueryable<Account> GetBySubscriptionId(int subId) 
{ 
    return from a in db.Accounts 
      where a.Subscriptions.Any(s => s.SubscriptionId == subId) 
      select a; 
} 

jetzt das Modell für Konto wie folgt aussieht:

public class Account 
    { 
     public int AccountId { get; set; } 
     public string Name { get; set; } 

     // nav properties 
     public virtual List<Subscription> Subscriptions { get; set; } 
} 

Und wenn ich versuche, die gleiche LINQ Abfrage auszuführen jetzt bekomme ich diesen Fehler:

"The specified type member 'Subscriptions' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported."

Irgendwelche Vorschläge sehr geschätzt.

+0

Welche Version von Code First verwenden Sie und haben Sie Code-First-Mappings oder Konfigurationseinstellungen für diese beiden Entitäten? – DamienG

+0

nicht Code First Vorlagen als solche verwenden, nur diese Art von Modell im Code deklariert. – user427875

Antwort

4

Versuchen Sie, die Signatur von

 // nav properties 
     public virtual List<Subscription> Subscriptions { get; set; } 

zu

 // nav properties 
     public virtual ICollection<Subscription> Subscriptions { get; set; } 

Schamlos geklaut von Scott Hanselmann der Demo hier verändert sich - http://www.hanselman.com/blog/SimpleCodeFirstWithEntityFramework4MagicUnicornFeatureCTP4.aspx, die dieses Muster verwendet, ist auch hier ein Scott Guthrie Demo http://weblogs.asp.net/scottgu/archive/2010/07/23/entity-framework-4-code-first-custom-database-schema-mapping.aspx die gleiche Idee verwenden.

List<T> eine konkrete Umsetzung der verschiedenen Schnittstellen (ICollection, IQueryable, IEnumerable etc), verwendet Entity Framework-Proxy-Objekte, wenn es Dinge aus der Datenbank abruft, damit die virtual Erklärungen, die verschiedene Implementierungen dieser Schnittstellen zu benutzen, die ist, wo Ihre Fehler kommt von.

+0

Vielen Dank. Große Tutorials. – user427875

Verwandte Themen