C# 无法使用EntityFramework.IBM.DB2连接到Informix

C# 无法使用EntityFramework.IBM.DB2连接到Informix,c#,entity-framework,informix,C#,Entity Framework,Informix,我使用EntityFramework.IBM.DB2(v6.0.3)包从.Net 4.5.2应用程序连接到Informix数据库时遇到问题。当我尝试查询数据库时,我不断遇到以下错误: System.NotSupportedException:没有对应于的存储类型 基本类型“String”的EDM类型“EDM.String” 引发错误的行是: var existing = db .MyEntities .FirstOrDefault(e => e.IdB == myId);

我使用EntityFramework.IBM.DB2(v6.0.3)包从.Net 4.5.2应用程序连接到Informix数据库时遇到问题。当我尝试查询数据库时,我不断遇到以下错误:

System.NotSupportedException:没有对应于的存储类型 基本类型“String”的EDM类型“EDM.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; }
}
表格配置:

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);
    }
}
公共类MyEntityConfig:EntityTypeConfiguration
{
public EventTypeConfig()
{
ToTable(“MyEntity”);
HasKey(u=>u.IdB);
属性(u=>u.IdB).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
属性(s=>s.IdA).IsRequired();
属性(s=>s.NameA).IsRequired().HasMaxLength(200);
属性(s=>s.NameB).IsRequired().HasMaxLength(200);
has可选(e=>e.OtherEntities);
拥有许多(e=>e.otherentity);
}
}
当我运行
testconn40
时,我通过了一个测试,所以我认为连接到数据库不是问题。我还有一个项目,它的设置非常相似,所以我不知道出了什么问题


非常感谢任何人提供的有关此特定错误的任何帮助或信息。

EF支持仅通过使用IBM DB2客户机驱动程序提供。 由于IBM DB2客户机驱动程序使用DRDA协议,因此 需要使用IDS服务器启用DRDA端口,然后它就可以工作了

IBMDB2客户机团队在developerworks论坛上更加活跃。 如果您仍然遇到问题,可以通过developerworks重新发布,url是


此错误是由于.Net类型如何映射到数据库类型造成的

我的一个数据库表中有一个字段,类型为
LVARCHAR(32000)
,实体上对应的字段为
string
。我将数据库中的字段更新为
NCHAR(32000)
,并将以下内容添加到实体配置类中:

Property(s => s.StringProp).HasMaxLength(32000).IsRequired();
一旦我做了这些更改,错误就消失了

我遇到的另一个奇怪的错误是:

System.NotSupportedException:没有对应于的存储类型 基元类型“Guid”的EDM类型“EDM.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
执行任何操作时,都必须尽可能简单明了,否则您将继续遇到难以理解的错误,很少或无法在线找到支持


希望这对将来的人有所帮助。

这是启用的-我已经能够通过Entity Framework从另一个应用程序连接到服务器,正如我所说的那样。另外,当我发布这个问题时,我在那个论坛上发布了相同的问题。
var id = myGuid.ToString();

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