C# 无法使用EntityFramework.IBM.DB2连接到Informix
我使用EntityFramework.IBM.DB2(v6.0.3)包从.Net 4.5.2应用程序连接到Informix数据库时遇到问题。当我尝试查询数据库时,我不断遇到以下错误: System.NotSupportedException:没有对应于的存储类型 基本类型“String”的EDM类型“EDM.String” 引发错误的行是: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);
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);