2016-04-04 7 views
2

ich Probleme habe aus einer .Net 4.5.2 Anwendung zu einer Informix-Datenbank verbinden mit dem EntityFramework.IBM.DB2 (V6.0.3) Paket. Ich halte die folgende Fehlermeldung erhalten, wenn ich versuche, die Datenbank abzufragen:leider nicht möglich, Informix verbinden EntityFramework.IBM.DB2 mit

System.NotSupportedException : There is no store type corresponding to the EDM type 'Edm.String' of primitive type 'String'.

Die Linie um den Fehler zu werfen ist:

var existing = db 
    .MyEntities 
    .FirstOrDefault(e => e.IdB == myId); 

Das Unternehmen selbst:

public class MyEntity 
{ 
    public long IdA { get; set; } 

    public long IdB { get; set; } 

    public string NameA { get; set; } 

    public string NameB { get; set; } 

    public ICollection<OtherEntity> OtherEntities { get; set; } 
} 

und das Skript verwendet um die Tabelle zu erstellen:

create table myentity (
    idA BIGINT not null, 
    idB BIGINT not null, 
    nameA NVARCHAR(200) not null, 
    nameB NVARCHAR(200) not null 
) 
extent size 32 next size 32 
lock mode page; 

alter table myentity add constraint primary key 
    (idB) 
    constraint pk_myentity; 

Die Tabelle config:

public class MyEntityConfig : EntityTypeConfiguration<MyEntity> 
{ 
    public EventTypeConfig() 
    { 
     ToTable("MyEntity"); 
     HasKey(u => u.IdB); 
     Property(u => u.IdB).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
     Property(s => s.IdA).IsRequired(); 
     Property(s => s.NameA).IsRequired().HasMaxLength(200); 
     Property(s => s.NameB).IsRequired().HasMaxLength(200); 

     HasOptional(e => e.OtherEntities); 
     HasMany(e => e.OtherEntities); 
    } 
} 

Als ich testconn40 betreibe ich einen Test-bekommen Bestanden so ein Problem, ich glaube nicht, dass es auf die Datenbank zu verbinden. Und ich habe ein anderes Projekt, das mit einem sehr ähnlichen Setup arbeitet, also habe ich keine Ahnung, was falsch ist.

Jede Hilfe oder Informationen, die jemand zu diesem bestimmten Fehler geben kann, würde sehr geschätzt werden.

Antwort

1

Dieser Fehler zurückzuführen ist, wie .NET-Typen auf die Datenbanktypen zugeordnet wurden.

Ich hatte ein Feld in einer meiner Datenbanktabellen der Typ LVARCHAR(32000) und das entsprechende Feld auf meiner Entität war string. Ich aktualisiert, um das Feld in der Datenbank NCHAR(32000) zu sein und fügte auch die folgenden meiner Einheit Config Klasse:

Property(s => s.StringProp).HasMaxLength(32000).IsRequired(); 

Sobald ich diese Änderungen die Fehler verschwunden gemacht.

Ein weiterer seltsamer Fehler stieß ich auf war:

System.NotSupportedException : There is no store type corresponding to the EDM type 'Edm.Guid' of primitive type 'Guid'.

Informix scheint nicht zu dem Guid-Typen zu unterstützen; Ich benutzte VARCHAR(36) und zwischen Guid und String beim Einfügen und Abrufen zugeordnet, so dass dieser Fehler ziemlich seltsam war. Es stellte sich heraus, wie ich mit LINQ abgefragt habe.

Diese Linie führt den Fehler:

var dbEntity = dbContext 
    .MyEntities 
    .FirstOrDefault(e => e.Id == myGuid.ToString()); 

Wo, wie dies funktioniert gut:

var id = myGuid.ToString(); 

var dbEntity = dbContext 
    .MyEntities 
    .FirstOrDefault(e => e.Id == id); 

Im Grunde, was ich gefunden habe, ist, dass man alles so einfach und unkompliziert wie möglich zu halten, wenn versuchen, etwas mit der EntityFramework.IBM.DB2 zu tun, oder Sie werden weiterhin in kryptischen Fehlern mit wenig oder nicht Unterstützung online gefunden werden.

Hoffe das hilft jemand in der Zukunft.

0

Die EF-Unterstützung erfolgt nur mithilfe des IBM DB2-Clienttreibers. Da IBM DB2-Client-Treiber DRDA-Protokoll verwendet, müssen Sie DRDA-Port mit IDS-Server aktivieren und dann sollte es funktionieren.

Das IBM DB2 Client-Team ist aktiver im Developerworks-Forum. Wenn Sie noch erhalten Problem Sie es über developer umbuchen können, wird die URL

https://www.ibm.com/developerworks/community/forums/html/forum?id=11111111-0000-0000-0000-000000000467

+0

Dies ist aktiviert - ich konnte eine Verbindung zum Server über Entity Framework über eine andere Anwendung herstellen, wie ich in Frage gestellt habe. Außerdem habe ich dieselbe Frage in diesem Forum gepostet, als ich diese gepostet habe. – RagtimeWilly

Verwandte Themen