2008-08-24 13 views
0

Ich stieß kürzlich auf ein Problem mit linq auf einem freigegebenen Host.
Der Host ist Shared Intellect und sie unterstützen v3.5 des Frameworks. Ich bin jedoch unsicher, ob SP1 installiert ist. Mein Verdacht ist, dass sie es nicht tun.Linq 2 SQL auf freigegebenen Host

Ich habe eine einfache News Tabelle, die die folgende Struktur:

NewsID   uniqueidentifier 
Title   nvarchar(250) 
Introduction nvarchar(1000) 
Article   ntext 
DateEntered  datetime (default getdate()) 
IsPublic  bit (default true) 

Mein Ziel aus dieser Tabelle sind die drei neuesten Datensätze, die angezeigt werden. Ich ging zunächst die D & D-Methode (ich weiß, ich weiß) und erstellt eine Linq-Datenquelle und war nicht in der Lage, eine Möglichkeit zu finden, die Ergebnisse so zu begrenzen, wie ich es wünschte, also entfernte ich das und schrieb folgendes:

var dc = new NewsDataContext(); 
var news = from a in dc.News 
      where a.IsPublic == true 
      orderby a.DateEntered descending 
      select new { a.NewsID, a.Introduction }; 
lstNews.DataSource = news.Take(3); 
lstNews.DataBind(); 

Dies funktionierte perfekt auf meinem lokalen Rechner.

Allerdings, wenn ich alles auf den gemeinsamen genutzten Host hochgeladen, erhielt ich folgende Fehlermeldung:

.Read_<>f__AnonymousType0`2 
(System.Data.Linq.SqlClient.Implementation.ObjectMaterializer`1<System.Data.SqlClient.SqlDataReader>) 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.MethodAccessException: 
.Read_<>f__AnonymousType0`2 
(System.Data.Linq.SqlClient.Implementation.ObjectMaterializer`1<System.Data.SqlClient.SqlDataReader>) 

Ich habe versucht, den Fehler auf Google zu suchen, aber ohne Erfolg. Ich versuchte dann, meine Abfrage in jeder Weise zu ändern, die ich mir vorstellen konnte, verschiedene Kombinationen der wo/orderby Parameter zu entfernen sowie meine Abfrage auf eine einzelne Spalte zu beschränken und sogar den Take-Befehl zu entfernen.

Meine Frage kommt daher in 3 Teilen:

  1. Hat jemand anderes dies festgestellt und wenn ja, eine „schnelle“ fix ist da?
  2. Gibt es eine Möglichkeit, die Datenquelle zu verwenden, um die Zeilen zu begrenzen?
  3. Gibt es irgendeine Art und Weise zu bestimmen, welche Version des Frameworks der Hostern sie direkt von E-Mail kurz ausgeführt wird (was ich getan habe und eine Antwort erwarten)

Antwort

2

System.MethodAccessException vom Framework ausgelöst wird, wenn es Eine Assembly fehlt oder eine der Referenzen hat die falsche Version.

Die erste Sache, die ich tun würde, ist zu versuchen, Ihren Code zu den LINQ-Assemblies in Ihrem BIN hochzuladen und zu referenzieren, anstatt des geteilten hosting-Providers GAC.