Die Abbildung von CLR-Typ EDM-Typ ist mehrdeutig mit EF 6 & 5?
Bitte jemand mir helfen kann diesen Fehler zu beheben?
Angegebene Schema ist ungültig. Fehler:
Die Abbildung von CLR-Typ EDM-Typ ist mehrdeutig, da mehrere CLR-Typen entsprechen den EDM-Typ "City_DAL'. Zuvor fand CLR-Typ 'CeossDAL.City_DAL', neu gefundenen CLR-Typ 'CeossBLL.City_DAL'.
Das größte problem, dass ich habe DAL und enthält die EF und BLL, und dies enthält die gleichen Klassen von den DAL, sondern unterscheiden sich in der namespace und das ist, was das problem verursachen
Kann ich nicht wissen, wie Sie loszuwerden, diese Probleme, können Sie mir bitte helfen?
Auch ich werde dankbar sein wenn jemand mir Beispiel n-tier-Architektur mit EF
Danke
InformationsquelleAutor Mahmoud Samir | 2013-02-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht die Verwendung von Klassen mit dem gleichen unqualifizierten name - EF verwendet werden nur die Klassen-Namen zu identifizieren, den Typ zugeordnet im EDMX (namespaces werden ignoriert) - es ist eine Konvention zu ermöglichen Zuordnung von Klassen aus anderen namespaces zu den einzelnen Modell. Die Lösung für dein problem ist, benennen Sie Ihre Klassen in BLL anders.
EF keine Karte zwischen zwei Klassen. Es ordnet, der zwischen entity im Diagramm und sieht für eine einzelne Klasse mit dem gleichen Namen.
Ich habe zwei Klassen, wie ich mit einem Projekt arbeiten, mit tier-3 - (DAL/BLL/PL) ,so habe ich die EF in der DAL und ich haben den gleichen EF-Klassen in der BLL ,in der BLL jede Klasse enthält Methoden, die verwendet werden, um Methoden aufzurufen DAL und diese Methoden in der DAL benötigen wie ein Objekt aus Klasse Produkt, das es in der DAL, aber ich nenne diese Methode von der BLL also, wenn ich pass -, Objekt DAL Methoden erstelle ich ein Objekt aus dem Produkt, dass es in der BLL und hier wird die Ausnahme ausgelöst.
Ich würde gegeben haben, bis auf EF, ohne Ihre Beiträge. Wieder gespeichert. Danke.
EF Kollision tritt nur auf, wenn zwei Klassen den gleichen Namen UND den gleichen Satz an Parametern.
InformationsquelleAutor Ladislav Mrnka
Problemumgehung: Ändern einer Eigenschaft auf einem der beiden identischen Klassen.
EF-Spiele auf Klasse Namen UND Eigenschaften der Klasse. Also ich habe gerade eine Eigenschaft name auf einem der EF-Objekte, und der Fehler ist Weg.
Als @Entrodus kommentierte einer der anderen Antworten:
Ich legte Sie in verschiedenen Versammlungen.. keine Notwendigkeit zu Chaos mit dieser
Wenn du beide Baugruppen in der gleichen Lösung, Sie starten immer die Fehler.
In der widersprüchlichen Einheit in der EDMX, ich habe versucht den Namen zu ändern einer der Eigenschaften, indem eine weitere Eigenschaft, indem eine Partielle Klasse mit "dummy" - Eigenschaften... keiner von Ihnen arbeitete. Nur die änderung des namens der Entität für mich gearbeitet...
Das ist eine sinnlose Aussage. Klassen haben keine Parameter.
InformationsquelleAutor Matt
Diese MSDN forum-Frage könnte hilfreich sein. Es empfehlen Platzierung der BLL und DAL Klassen in separaten Baugruppen.
tblSetting
. Ich habe es auf 2 verschiedenen Baugruppen (immer auf die andere Baugruppe) und es funktioniert nicht 🙁InformationsquelleAutor Jarno
In einigen Fällen ist dies eher ein symptom als das eigentliche problem. Für mich ist es in der Regel angezeigt, wenn ich versuche, eine Funktion aufzurufen, die innerhalb einer Linq-Abfrage, ohne Aufruf .ToList ().
E. g. der Fehler, der mich hierher gebracht wurde verursacht, weil ich habe diese:
Musste ich anrufen .ToList(), dann Durchlaufen Sie jedes Element und den Typ zuordnen.
InformationsquelleAutor Captain Kenpachi
Für EF 6.x fand ich einige Hinweise auf https://github.com/aspnet/EntityFramework/issues/941 und fixiert diese in meiner Lösung durch das hinzufügen von Annotationen zu den EDM-Typ.
Ich bearbeitet habe, der EDMX-Datei manuell und verändert eine Zeile wie diese:
:
oder verwenden Sie diese, wenn Sie bereits Art anderswo:
wo EntityModel ist der namespace für mein EF-Modell, und MyApp ist der namespace von einem business-Objekt
🙁 Ich habe nur verwendet es mit MSSQL
Dass Github post sagt auch hinzufügen
customannotation:UseClrTypes
zu<EntityContainer>
. (Funktioniert immer noch nicht bei mir in EF 6)Hat bei mir nicht funktioniert, mit mySQL
InformationsquelleAutor Ekus
Kann dies nicht verfügbar, wenn die Frage gestellt wurde, aber eine andere Lösung ist das löschen der EDMX und erstellen Sie ihn neu als " code-first entity data model. In EF6, mit code-first, Sie können die Karte zwei Klassen mit dem gleichen Namen aus verschiedenen Modell-namespaces, ohne einen Konflikt zu verursachen.
Erstellen Sie die entity data model in Visual Studio (2013), gehen Sie auf "Hinzufügen" > "Neues Element..." > "ADO.NET Entity Data Model". Werden Sie sicher, dass Sie die "Code First " aus Datenbank" - option.
Ich weiß nicht, ob es einen Unterschied macht, aber ich wurde auf MS-SQL-Server, wenn ich das Tat.
Dieser arbeitet absolut für mich. Ich habe eine situation, wo keine der anderen Lösungen scheinen sich zu bewerben.
InformationsquelleAutor Tawab Wakil
Einem anderen Grund erhalten Sie möglicherweise diese Fehlermeldung:
Wenn Sie laden, kundenspezifische Baugruppen mit Montage.LoadFile, die edmx-Dateien, die bereits in den Speicher geladen. Dies schafft doppelte Klassen, entity framework nicht mag.
InformationsquelleAutor Thomas
Bekam ich den oben genannten Fehler, weil für beide Verbindungszeichenfolgen, ich hatte den gleichen Wert für Metadaten angegeben, die in mein Haupt-Projekt config-Datei, wie unten:
Landete ich kopieren die korrekte Verbindungszeichenfolge aus der EntitiesB Projekt config-Datei.
InformationsquelleAutor Kristianne Nerona
Für mich war, weil ich versucht auf eine Art mit dem gleichen Namen auf der falschen context-Instanz.
Sagen, beide
ContextA
undContextB
habenSomeType
. Ich habe versucht, den ZugriffContextA.SomeType
auf eine Instanz vonContextB
.InformationsquelleAutor Dave Cousineau
Nur hinzufügen, dass das EntityFramework als "Code First " aus Datenbank" und nicht als "EF-Designer aus der Datenbank". Dieser mein problem gelöst, aber es hat eine dunkle Seite, wenn Sie eine änderung an Ihrer Datenbank, die Sie entfernen müssen alle Klassen und fügen Sie es erneut, oder Bearbeiten Sie die Klassen, die ich die letzten, wenn ich ändern Sie die Eigenschaften der Spalten, wie "Erlaubt " null" oder die Größe einer Zeichenkette. Aber wenn Sie Spalten hinzufügen, empfehle ich das entfernen und wieder hinzufügen der Klassen.
InformationsquelleAutor Felipe Batista Suardi
War ich in der Lage, dieses Problem zu lösen, ohne das umbenennen der Klassen, Eigenschaften oder Metadaten.
Hatte ich meine Projekt-setup mit einem T4-Transformation erstellen von entity-Objekten in einer DAL-Projekt, und ein T4-Transformation erstellen von domain-Objekten in einer Domäne-Projekt, beide verweisen auf die EDMX generiert identische Objekte, und dann war ich im mapping der DAL-Objekte, um die Domain-Objekte.
Den Fehler nur aufgetreten, wenn ich war das verweisen auf andere Klassen (Enumerationen, die in meinem Fall) aus der Domäne der Montage in meinen Abfragen. Wenn ich Sie abgenommen, der Fehler ging Weg. Es sieht aus wie EF Beladung bis meine Domain Montage, denn von diesem sind, sehen die anderen gleich benannten Klassen und Sprengung.
Um dies zu beheben, machte ich eine separate Baugruppe, die nur enthielt mein T4 umgewandelt Domain-Klassen. Da ich noch nie verwenden müssen diese innerhalb einer Abfrage (erst nach der Abfrage anzeigen zu können), habe ich nicht mehr dieses Problem haben. Dies scheint sauberer und einfacher als die Antworten unten.
InformationsquelleAutor Carson
wenn du 2-Verbindungszeichenfolge in der web-config, aber Sie möchten, verwenden Sie eine Verbindungszeichenfolge
Verwenden Sie die dynamische Verbindung erstellen string-Instanzen.
Ich habe edmx(db-first) und die erste code-Entitäten in meiner Lösung.
Ich benutze diese Klasse in die erste Code-Entitäten.
Und wenn ich rufe Entitäten
InformationsquelleAutor Cetin Sahin
Ich Denke, u Haben eine Klasse X mit dem Namen "MyClass" in Entity-Modellen und eine Weitere Klasse "MyClass" in der gleichen Arbeitsverzeichnis oder Erweitert der ersten Klasse.
Das ist mein problem und ich fix es.
InformationsquelleAutor Maximiliano Cesán
Es gibt eine Bibliothek namens AutoMapper, die Sie herunterladen können. Es hilft Ihnen, zu definieren class mappings von einem Typ zu einem anderen.
nicht wirklich, anwendbar auf Benutzer Frage. Mit automapper nicht nur fix sein Thema.
InformationsquelleAutor pkamathk