Hallo,
ich bin ein Anfägner mit ASP.NET und versuche ein Controller zu erstelln aber kriege immer en Fehler.
Erste clicke ich rechts auf ->Controllers->hinzufügen->Controller,
Dann kommt eine Nachrichte:> Fehlermeldung:
Metadaten für "MvcMovie.Models.Movie" könnnten nciht abgerufen werden,using the same DbcCompiledModel to create context against different types of databases servers is not supported,instead create a seperate DbCompiled Model for each type of server being used.
ich versuche eigentlich nur dieses Touturial zu machen,vielleicht könnte das hilfreic h sein.
http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/accessing-your-model%27s-data-from-a-controller
Vielen Dank für jedes Hilfe:)
Genau Fehlermeldung bitte. Wenn man nach Deiner Fehlermeldung googelt erhält man ca. 10 verschiedene, von denen keine 100%tig passt und mehrere ähnlich sind.
Also nochmal ein Versuch für Dich:
Siehe auch [Hinweis] Wie poste ich richtig? Punkt 5
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Also das ist kein Fehler von ASP.NET. Du verwendest übrigens ASP.NET MVC (es gibt auch noch ASP.NET WebForms, was eine ganz andere Geschichte ist).
Was Du genau machst sehe ich - und die anderen - ohne Code schlecht.
Aber offensichtlich tust Du was ungültiges.
Den genauen Code-Teil, der den Fehler bei Dir erzeugt, hast Du leider noch nicht angehängt - somit bleibt nur das Raten; und darauf hab ich nich so arg Lust.
Ich vermute, dass Du zwei verschiedene EF Provider verwendest.
Eventuell SqlClient und SqlServerCe. Jedenfalls ist auch das meist der Fehler, wenn man nach "using the same DbcCompiledModel to create context against different types of databases servers is not supported" googelt.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich weiß der Thread ist alt aber aus aktuellem Anlass bin ich in genau den selben Fehler reingerasselt.
(Hinweis an Abt: Er hat doch geschrieben, was er macht: Im Projektmappen-Explorer in seinem Projekt Rechtklick auf Controllers -> Hinzufügen -> Controller.
Was in der Beschreibung fehlt ist der weitere Vorgang:
Bisher bin ich auf mehrere Ansätze, aber keine wirklichen Lösungen gestoßen.
Mein erster (eigener) Ansatz war die Sektion "<entityFramework>" in der web.config. Diese habe ich angepasst an meinen verwendeten Datenbank-Provider (laut verschiedener Aussagen im WWW nicht notwendig, da es sich hierbei wohl um eine "Fallback"-Angabe handelt für den Fall, dass kein ConnectionString vorhanden ist, der von EF genutzt werden kann/soll):
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
leider hat das bezüglich der genannten Fehlermeldung keine Änderung gebracht.
Im WWW gibt es sonst nur Workarounds, wie z.B. das Ändern des ConnectionString-Namens damit dieser nicht mehr von EF zur Datenkontextklasse zugeordnet werden kann. Anschließend lässt sich der Controller erstellen und danach kann man den Namen wieder zurückändern. Temporäres Auskommentieren des ConnectionString in der web.config hat den gleichen Effekt.
Aber es ist und bleibt ein Workaround und keine Lösung!
Auch die Installation des NuGet-Packages EntityFramework.SqlServerCompact hat keine Änderung gebracht.
Ebenso die Anpassung des Konstruktors meiner Datenkontextklasse mit Aufruf von base(<name des ConnectionString>) hat keinen Erfolg gebracht:
public WorktimeContext() : base("WorktimeContext") { }
klar könnte ich base() mit einem "Namen" aufrufen, welcher nicht als ConnectionString definiert ist, aber das ist dann nur eine andere Version des weiter oben schon erwähnten Workarounds.
so far
Karill Endusa
Hallo Karill Endusa,
Warum erstellst du nicht von Hand eine Klasse die sich von "Controller" ableitet?
Wenn ich mich nicht täusche ist "Controller hinzufügen..." nichts anderes als eine Vorlage die ein bißchen Schreibarbeit erspart.
Mfg
Rabban
"ein bisschen" ist gut...
Es werden der Controller und die Views für CRUD Operationen erstellt.
Wenn ich für jede Entity das Ganze von Hand machen müsste, geht mir einiges an Zeit flöten, die ich für wirklich sinnvolle Arbeit einsetzen könnte.
Würde ich EF nur im privaten Bereich nutzen hätt ich damit weniger ein Problem, aber mit solchen Problemen kann ich nicht in das kommende Projekt gehen.
so far
Karill Endusa
Wenn ich für jede Entity das Ganze von Hand machen müsste, geht mir einiges an Zeit flöten
Diesen Aufwand sehe ich jetzt nicht so. Wir haben hier auch einige größere Webprojekte in unserem Haus und erfahrungsgemäß müssen wir eh die meisten Views nochmal anfassen, bzw. komplett überarbeiten. Somit ist, aus meiner Sicht, die Zeitersparnis minimal, da die Vorlage nur die Dateien anlegt.
Wenn du dir aber Zeit sparen willst, dann kannst du doch mit Snippets arbeiten, die genau das gleiche für dich machen. Dann ist dein einziger Aufwand, die Dateien anzulegen.
MfG
Rabban
Meiner Ansicht nach geht mehr Zeit mit den VS-Vorlagen flöten.
Wieso? Weil die Mist sind und man sie umschreiben oder rauslöschen muss, damit diese anständig verwendbar wären.
VS Vorlagen arbeiten immer damit, dass eine Entitiy von der View am Controller ankommt. Ohne Repositories, ohne klare Trennung der Schichten. Nirgends wird gezeigt, wie man Business-Code sauber auslagert.
Sowas ist alles andere als realitätsnah. Das alles soll auch gar nicht realitätsnah sein, sondern den Anfängern nur unterstützend zur Seite stehen - wie alle Beispielprojekte von MS.
Oft muss man doch einer Entität noch weitere Dinge mitgeben wie LastUpdatedTime oder ähnliches, was gar nicht von der Form an die Action mitgebracht wird.
Zudem gehören Entities nicht in die View. Dafür gibts ViewModels und zum Empfang an der Action SubmitModels..
Und noch nen Beispiel:
Wie sieht so ne URL meist aus?
Movie/Add -> Neue Hinzufügen
Move/{name} -> Ansicht
Movie/{name}/Edit -> Editieren
Movie/{name}/Whatever/Foo
Ist sowas noch durch einen einfachen Controller abbildbar?
Korrekt: nein ist es nicht. Entweder man muss seinen Controller verunstalten oder man machts sauber und arbietet mit Area
s.
Da heißen dann schon nicht mehr die Actions Edit, sondern der Controller - dann sind die Vorlagen zwar für den Eimer; aber die Struktur der Anwendung sauber.
Besser ist das ganze Zeug von Hand zu schreiben.
Ich hab zum Beispiel mindestens zwei Basis-Controller, von denen ich ableite.
Einmal für Sync und einmal für Async-Controller. Dann meist noch Basis-Controller mit und ohne Sessionverwaltung... (zB für Content-Delivery).
Beide haben wiederum Standard-Methoden, um zum Beispiel viel einfacher mit der TempData umgehen zu können. Zum Beispiel wenn aufgrund eines Fehlers eine Umleitung auf eine andere Seite stattgefunden hat.
AddTempError("Sie haben nicht genug Rechte, um diese Seite anzufordern.");
return RedirectToHome();
protected void AddTempError( string message )
{
if ( ViewData[ "TempErrors" ] == null )
{
TempData[ "TempErrors" ] = new List<String> { message };
}
else
{
var tempEntries = TempData[ "TempErrors" ] as List< string >;
if ( tempEntries != null )
{
tempEntries.Add( message );
}
else
{
TempData[ "TempErrors" ] = new List<String> { message };
}
}
}
Beim Aufruf von Home wird dann automatisch der Inhalt aus TempData geladen etc...
Fazit für mich: die Vorlagen von MVC sind alle sehr nett für den Einstieg.
In großen Anwendungen alles andere als zu gebrauchen.
Ich könnt auch mit der Abwertung der Vorlagen gleich weiter machen.
Da wäre die web.config oder die Route-Generierung gleich das nächste Trefferziel.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code