2016-04-04 58 views
2

我在使用EntityFramework.IBM.DB2(v6.0.3)軟件包從.Net 4.5.2應用程序連接到Informix數據庫時遇到問題。我不斷收到以下錯誤,當我嘗試查詢數據庫:無法使用EntityFramework.IBM.DB2連接到Informix

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

行引發錯誤是:

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

實體本身

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; } 
} 

和腳本使用創建表格:

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; 

表配置:

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); 
    } 
} 

當我運行testconn40我獲得通過,所以我不認爲這是連接到數據庫中的問題進行測試。而且我有另一個項目與一個非常類似的設置工作,所以我不知道什麼是錯的。

任何人都可以對這個特定的錯誤提供任何幫助或信息將非常感激。

回答

1

此錯誤是由於怎樣的.NET類型都被映射到數據庫類型。

我在我的一個數據庫表中有一個字段,其類型爲LVARCHAR(32000),我的實體上對應的字段爲string。我更新的領域在數據庫中是NCHAR(32000)還增加了以下我的實體配置類:

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

一旦我做了這些改變錯誤消失。

我遇到了另一個奇怪的錯誤是:

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

的Informix似乎並不支持Guid類型;我使用VARCHAR(36)並在插入和檢索時映射到Guid和字符串之間,所以這個錯誤很奇怪。事實證明,這與我在LINQ中查詢的方式有關。

此行引發錯誤:

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

在哪裏,因爲這工作得很好:

var id = myGuid.ToString(); 

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

基本上就是我發現的是,你必須把一切都簡單明瞭地時試圖用EntityFramework.IBM.DB2做任何事情,否則你將繼續遇到神祕的錯誤,很少或不支持在網上找到。

希望這可以幫助未來的人。

0

EF支持僅通過使用IBM DB2客戶端驅動程序。 由於IBM DB2客戶端驅動程序使用DRDA協議,因此您需要使用IDS服務器啓用DRDA端口,然後它應該可以工作。

在developerworks論壇上,IBM DB2 Client團隊更加活躍。 你可以轉貼過來的developerWorks如果仍然出現問題,網址是

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

+0

這是啓用 - 我已經能夠通過實體框架通過其他應用程序連接到服務器,正如我所說的問題。另外,當我發佈此論壇時,我在該論壇中發佈了相同的問題。 – RagtimeWilly